【问题标题】:400 Bad Request when posting JSON Array to a Spring controller将 JSON 数组发布到 Spring 控制器时出现 400 错误请求
【发布时间】:2013-05-14 02:44:04
【问题描述】:

我已成功将一个简单的 JSON 对象发送到 Spring 框架控制器

curl -v -H  "Content-Type: application/json" -H "Accept: application/json"  -d '{"lastName":"Smith","firstName":"John"}' http://localhost:8080/WebServices02/aura/testJsonArray

然而,当我发送一个带有嵌入数组的 JSON 对象时

curl -v -H  "Content-Type: application/json" -H "Accept: application/json"  -d '{"lastName":"Smith","pals":[{"name":"Billy"}],"firstName":"John"}' http://localhost:8080/WebServices02/aura/testJsonArray

我收到错误 400“客户端发送的请求在语法上不正确 ()。”

我的控制器是

@Controller
@RequestMapping(value="/aura")
public class AuraController {

@RequestMapping(value = "/testJsonArray", method = RequestMethod.POST,  headers = {"content-type=application/json"})
@ResponseBody
public void testJsonArray(@RequestBody  Aura aura){
    System.err.println("Called testJsonArray(): " + "Aura is " + aura.toString());
}

}

我的 Aura 类定义为

import java.io.Serializable;
import java.util.List;
import org.json.JSONObject;

public class Aura implements Serializable {

public class Pal{
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}


private String firstName;

private String lastName;

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

private List<Pal> pals;

public String toString(){
    return new JSONObject(this).toString();

}

public List<Pal> getPals() {
    return pals;
}

public void setPals(List<Pal> pals) {
    this.pals = pals;
}

}

我的 bean(在 mvc:message-converters 下)是

<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>

如果有人可以帮助我...谢谢

【问题讨论】:

  • 呃……愚蠢的错误。 Pal 不应该是内部类。问题解决了

标签: rest spring-mvc http-post


【解决方案1】:

您必须在项目中包含 jackson-core-asl 和 jackson-mapper-asl 的 Jackson JSON Mapper 依赖项。

这是用 java pojo 类字段映射 json 所必需的。

【讨论】:

  • (我在发布后才发现这一点),原因(因为嵌入式数组不起作用而简单的 JSON 数组起作用)是 Pal 是一个内部类。一旦我把它变成一个单独的类,它就一切正常了....感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2016-06-14
  • 2015-02-25
  • 2021-11-21
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 2019-12-26
  • 1970-01-01
相关资源
最近更新 更多