我忙于Dropwizard应用程序,需要将一个数组注入POJO作为srcAccessMask
方法的参数之一。遗憾的是,未正确处理数组会导致put
响应。为了说明前端传递的JSON看起来像:
Bad Request
我的Java代表:
{
"name": "Jon",
"surname": "Doe",
"children": ["Chris", "Dave", "Sam"]
}
在我的资源类中:
public class Person{
private String name;
private String surname;
private List<String> children;
public Person(){
}
@JsonProperty
public String getName(){
return name;
}
@JsonProperty
public void setName(String name){
this.name=name;
}
@JsonProperty
public String getSurname(){
return surname;
}
@JsonProperty
public void setsurname(String surname){
this.surname=surname;
}
@JsonProperty
public List<String> getChildren(){
return children;
}
@JsonProperty
public void setChildren(List<String> children){
this.children=children;
}
}
如何在JSON中正确处理数组的反序列化?
修改
我正在使用角度前端,我按如下方式调用方法:
@PUT
@Timed
@UnitOfWork
@Path("/{userid}")
public Response getData(@PathParam("userid") LongParam userId,
Person person) {
// Do some stuff with the person
}
function(json){
return $http({
url: API_URL.people+"/update/personID",
method: "PUT",
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
},
data: json
});
}
参数包含上述名称,姓氏和子项。
答案 0 :(得分:1)
看起来GET服务定义不正确。它不应该Person
定义。
根据http
方法定义,GET http method
无法使用正文。因此,您无法将Person
作为输入参数。
如果您需要将Person
发送给服务,则可能需要根据您的要求将http方法更改为POST或其他内容(例如PUT
)。
@GET
@Timed
@UnitOfWork
@Path("/{userid}")
public Response getData(@PathParam("userid") LongParam userId) {
// Do some stuff with the person
}
答案 1 :(得分:0)
原来我提供的代码就像魅力一样。经过进一步调查后,我在javascript
对象中犯了一个错误,该对象被转换并作为JSON
发送,导致错误。