【问题标题】:Spring MVC: POST Request Json Object with list returns 400 bad requestSpring MVC:带有列表的 POST 请求 Json 对象返回 400 错误请求
【发布时间】:2015-09-22 01:32:46
【问题描述】:

当我将数组添加到 JSON 对象时,我的 POST 请求出现 400 BAD REQUEST 错误。

MemberDTO.java

public class MemberDTO{
private String memberId;
private String purchaseDate;
private List<ProductDTO> selectedProductModels;
...
}

ProductDTO.java

public enum ProductDTO {
  PRODUCT1("Product 1", "12.00", "50%', "500.00"),
  PRODUCT2("Product 2", "120.00", "80%', "100.00");

  private String productName;
  private String discount;
  private String retailPrice;
  private String price;
....
}

Controller.java

@RequestMapping(value = "member/purchase", method = RequestMethod.POST)
public String purchase(@RequestBody MemberDTO data){
 ...
 }

JSON

var purchaseData = {
    "memberId" : "12312",
    "purchaseDate" : "2015/02/14",
    "selectedProductModels" : [{
         "productName" : "sample1",
         "discount": "10%",
         "retailPrice": "100.00",
         "price": "400.98"
     },{
         "productName" : "sample2",
         "discount": "20%",
         "retailPrice": "1400.00",
         "price": "4300.98"
     }]
};

Ajax 请求

$.ajax({
        type    : "POST",
        url     : contextPath + "/member/purchase.do",
        dataType: "json",
        contentType:"application/json",
        data    : JSON.stringify(purchaseData),
        success : function(data) {}
});

我尝试从 json 中删除“selectedProductModels”数组列表,并且得到了成功的响应。我错过了什么吗?

【问题讨论】:

  • 我敢肯定,如果您查看日志,您会看到无法创建枚举的异常。使用自定义反序列化器或根本不使用枚举。无论如何,这是一个丑陋的枚举。除非公司从不提供任何不同的产品和不同的价格和折扣,否则你最好只使用课程。
  • @peeskillet 我尝试使用其他类而不是使用该枚举,但在使用数组时仍然出现相同的错误。没有例外。 :(
  • 你有反序列化、无参数构造函数和适当的设置器的基本必需品吗?

标签: java json spring rest spring-mvc


【解决方案1】:

请尝试参考此处讨论的枚举反序列化选项

Jackson enum Serializing and DeSerializer

Serializing enums with Jackson

Converting JSON to Enum type with @RequestBody

您可以指定 Enum 常量中指定的确切值“Product 1”、“12.00”、“50%”、“500.00”,因为只能解析这些值,否则您必须编写自定义 JSON 反序列化程序

注意:“产品 1”、“12.00”、“50%”、“500.00” 文本中有单引号是类型错误吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    相关资源
    最近更新 更多