【问题标题】:Mapping JSON data in Spring MVC using Jackson parser使用 Jackson 解析器在 Spring MVC 中映射 JSON 数据
【发布时间】:2012-09-26 10:25:54
【问题描述】:

客户端代码:

$.ajax({
        type: "POST",
        url: "../web/zittles",
        data: jsonformatdata,
        contentType: "application/json",
        dataType: "json",
    success: function(data)
        {
        alert("data from server : "+data);
        },
        error: function(jqXHR, textStatus, errorThrown)
        {
            alert("jqXHR.status = "+jqXHR.status); //getting status code 400 here
        }        
});

输出json数据:

{
        "id": 1,
        "No": "1234",
        "Desc": "Testing"
}

Java 类:

public class Fizzle implements Serializable
{
    private String id;
    private String No;
    private String Desc;
    // getters and setters 
}

Spring 3 控制器:

@RequestMapping(value = '/zittles', method = RequestMethod.POST, headers ="Content-Type=application/json")
    public @ResponseBody void doSomeThing (@RequestBody Fizzle fizzle) {

        //do something here
}

app-servlet.xml 有

<mvc:annotation-driven/>

tomcat的/lib文件夹有

jackson-core-lgpl-1.9.10.jar
jackson-mapper-lgpl-1.9.10.jar

收到状态码 400 的错误 -

"The request sent by the client was syntactically incorrect"

当我如下所示更改控制器代码时,它将 json 数据作为字符串。

public @ResponseBody void doSomeThing (@RequestBody String fizzle) {}

理想情况下,Jackson 应该自动将 json 数据映射到 Fizzle 对象。

我在这里缺少什么。要正确配置 Jackson 解析器,还需要做些什么吗?

请帮忙。

【问题讨论】:

  • @RequestBody 将正文转储到该变量中,将其删除,我认为它应该可以工作。
  • 他想把输入的json转成POJO,所以@RequestBody是正确的

标签: ajax post spring-mvc jackson spring-3


【解决方案1】:

Id 必须是 long 或 int,而不是 String

 private int id;

编辑

也许试试这个 JSON:

{
        "id": 1,
        "no": "1234",
        "desc": "Testing"
}

并在 Fizzle 类中将属性更改为小写

编辑2 测试这是 Jakson 问题还是 Spring 问题。 将您的 JSON 保存到文件并尝试将其转换为对象:

ObjectMapper mapper = new ObjectMapper();
Fizzle fizzle = mapper.readValue(new File("c:\\fizzle.json"), Fizzle .class);

【讨论】:

  • 即使将属性更改为小写也不起作用。这真是令人沮丧。正如我在帖子中所说,当我接受 json 数据作为字符串时,它可以工作。有没有办法可以手动将此 json 字符串映射到我的 Fizzle 对象中?
【解决方案2】:

我正在回答我自己的问题,因为它对我有用。感谢“真空”给我方向。我正在使用 List,因为我正在接收一组 json 数据。

@JsonTypeName
@RequestMapping(value = '/zittles', method = RequestMethod.POST, headers ="Content-Type=application/json")     
public @ResponseBody void doSomeThing (@RequestBody String fizzles) 
{          
     //do something here
     ObjectMapper mapper = new ObjectMapper();
     ArrayList list = mapper.readValue(new StringReader(fizzles), ArrayList.class);
     List<Fizzle> fizzles1 = mapper.convertValue(list, new TypeReference<List<Fizzle>>() {});
}

【讨论】:

    猜你喜欢
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多