【问题标题】:Spring cannot deserialize the request bodySpring 无法反序列化请求正文
【发布时间】:2019-07-23 15:40:39
【问题描述】:

当我访问 GenericMockingForm 的内容时,它的 null

    @Controller
    @RequestMapping(value = "/**", produces = "application/json")
    public class GenericMockingController {

        @Autowired private GenericMockingService genericMockingService;

        @ResponseBody
        @PostMapping
        public ResponseEntity<String> processRequest(@RequestBody GenericMockingForm genericMockingForm, HttpServletRequest request) throws Exception {
            String requestURI = request.getRequestURI();
            return new ResponseEntity<>(genericMockingService.getJsonResponse(genericMockingForm, requestURI), HttpStatus.OK);
        }
    }

    public class GenericMockingForm {

        private List<String> productIds;
        private String salesChannelId;
        private Locale locale;

        public List<String> getProductIds() {
            return productIds;
        }

        public void setProductIds(List<String> productIds) {
            this.productIds = productIds;
        }

        public String getSalesChannelId() {
            return salesChannelId;
        }

        public void setSalesChannelId(String salesChannelId) {
            this.salesChannelId = salesChannelId;
        }

        public Locale getLocale() {
            return locale;
        }

        public void setLocale(Locale locale) {
            this.locale = locale;
        }
    }

    test payload and ulr http://localhost:8088/product/get-products:

    {
        "product_ids": ["1420-15595-82", "1420-58134-82"],
        "sales_channel_id": "www-k24-at",
        "locale": "de_DE"
    }

上面是我的代码

如何反序列化请求负载? 当我访问 GenericMockingForm 的内容时,它的 null

java.lang.NullPointerException
    at com.kfz24.mockingservice.service.impl.GernericMockingServiceImpl.getJsonResponse(GernericMockingServiceImpl.java:32)
    at com.kfz24.mockingservice.controller.GenericMockingController.processRequest(GenericMockingController.java:29)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)

【问题讨论】:

    标签: spring spring-boot spring-mvc jackson


    【解决方案1】:

    您的测试负载应该是:

    {
        "productIds": ["1420-15595-82", "1420-58134-82"],
        "salesChannelId": "www-k24-at",
        "locale": "de_DE"
    }
    

    【讨论】:

    • 哦!是的。但我无法修改有效载荷,它来自其他服务。我必须改变我的 POJO 结构
    【解决方案2】:

    好的。我通过更改 POJO 的结构解决了这个问题

    public class GenericMockingForm {
    
        @JsonProperty("product_ids")
        private List<String> productIds;
        @JsonProperty("sales_channel_id")
        private String salesChannelId;
        @JsonProperty("locale")
        private Locale locale;
    
        public List<String> getProductIds() {
            return productIds;
        }
    
        public void setProductIds(List<String> productIds) {
            this.productIds = productIds;
        }
    
        public String getSalesChannelId() {
            return salesChannelId;
        }
    
        public void setSalesChannelId(String salesChannelId) {
            this.salesChannelId = salesChannelId;
        }
    
        public Locale getLocale() {
            return locale;
        }
    
        public void setLocale(Locale locale) {
            this.locale = locale;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 2020-09-20
      • 2012-06-13
      相关资源
      最近更新 更多