1. 程式人生 > >Can not deserialize instance of java.lang.Integer out of START_OBJECT token 錯誤解決

Can not deserialize instance of java.lang.Integer out of START_OBJECT token 錯誤解決

今天在跟前端聯調一個新的接囗時遇到這個錯誤,錯誤程式碼
   /**
     * 掃描車牌號碼得到車輛資訊
     * @param plateId
     * @return
     */
    @RequestMapping(value = "scanPlateNumber")
    @ResponseBody
    public ResponseResult scanPlateNumber(@RequestBody Integer plateId) {
        VehicleEntity vehicleEntity;
        try{
            logger.info("批次發貨--新增車牌id:"+plateId);
因為@RequestBody是將post請求中content值轉為一個整體物件。@RequestBody的解析有兩個條件:
1.POST請求中content的值必須為json格式(儲存形式可以是字串,也可以是byte陣列);
[email protected]註解的引數型別必須是完全可以接收引數值的型別,比如:Map,JSONObject,或者對應的JavaBean;
所以Integer型別不能作為@RequestBody註解的引數型別,將上述程式碼修改如下(前端改成get請求)即可:
 
   /**
     * 掃描車牌號碼得到車輛資訊
     * @param plateId
     * @return
     */
    @RequestMapping(value = "scanPlateNumber")
    @ResponseBody
    public ResponseResult scanPlateNumber(@RequestParam Integer plateId) {
        VehicleEntity vehicleEntity;
        try{
            logger.info("批次發貨--新增車牌id:"+plateId);
            vehicleEntity = vehicleDAO.findVehicleById(plateId);

下面總結下我所在做專案常用接囗格式:

     1.post請求,引數通常為一個javaBean

    /**
     * 包裹發貨(中心倉)
     * @param orderPackageDeliveryParam
     * @return
     */
    @RequestMapping("deliveryOrderPackage")
    @ResponseBody
    public ResponseResult deliveryOrderPackage(@RequestBody OrderPackageDeliveryParam orderPackageDeliveryParam) {
        try {
            List<OrderPackageDeliveryVo> orderPackageAllEntityList = orderPackageDeliveryParam.getOrderPackageDeliveryVo();
    2.get請求

a.引數放在url裡(舊的接囗常用)

   /**
     * 掃描倉位碼得到倉位資訊
     * @param cityId
     * @return
     */
    @RequestMapping(value = "scanWarehousePositionCode/{cityId}")
    @ResponseBody
    public ResponseResult scanWarehousePositionCode(@PathVariable("cityId") Long cityId) {
        TimeAddressEntity timeAddressEntity;
        try {
            timeAddressEntity = timeAddressService.findTimeAddressWarehouseById(cityId);

                b.引數放在url後

   /**
     * 掃描車牌號碼得到車輛資訊
     * @param plateId
     * @return
     */
    @RequestMapping(value = "scanPlateNumber")
    @ResponseBody
    public ResponseResult scanPlateNumber(@RequestParam Integer plateId) {
        VehicleEntity vehicleEntity;
        try{
            logger.info("批次發貨--新增車牌id:"+plateId);
            vehicleEntity = vehicleDAO.findVehicleById(plateId);