Dropwizard反序列化数组

时间:2018-02-12 13:10:46

标签: java json jackson dropwizard

我忙于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 }); } 参数包含上述名称,姓氏和子项。

2 个答案:

答案 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发送,导致错误。