小编Man*_*olo的帖子

无法从VALUE_STRING中反序列化java.util.ArrayList的实例

我有一个使用Jersey构建的REST服务,并部署在AppEngine中.REST服务实现使用application/json媒体类型的动词PUT.数据绑定由Jackson执行.

动词使用JSON表示的企业部门关系

{"name":"myEnterprise", "departments":["HR","IT","SC"]}
Run Code Online (Sandbox Code Playgroud)

在客户端,我使用gson将JSON表示转换为java对象.然后,我将对象传递给我的REST服务,它工作正常.

问题:

当我的JSON表示在集合中只有一个项目时

{"name":"myEnterprise", "departments":["HR"]}
Run Code Online (Sandbox Code Playgroud)

该服务无法反序列化该对象.

ATTENTION: /enterprise/enterprise: org.codehaus.jackson.map.JsonMappingException: 
Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token at 
[Source: org.mortbay.jetty.HttpParser$Input@5a9c5842; line: 1, column: 2
Run Code Online (Sandbox Code Playgroud)

正如其他用户所报告的那样,解决方案是添加标志ACCEPT_SINGLE_VALUE_AS_ARRAY(例如,Jersey:无法从String中反序列化ArrayList的实例).然而,我并不是在控制ObjectMapper,因为在服务方面它是由Jackson透明地制作的.

题:

有没有办法在服务端配置ObjectMapper以启用ACCEPT_SINGLE_VALUE_AS_ARRAY?注释?web.xml中?

代码细节

Java对象:

@XmlRootElement
public class Enterprise {
    private String name;
    private List<String> departments;

    public Enterprise() {}

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<String> getDepartments() {
        return departments;
    }
    public void setDepartments(List<String> departments) {
        this.departments …
Run Code Online (Sandbox Code Playgroud)

java json arraylist jackson json-deserialization

52
推荐指数
5
解决办法
15万
查看次数

标签 统计

arraylist ×1

jackson ×1

java ×1

json ×1

json-deserialization ×1