相关疑难解决方法(0)

Jersey:无法从String中反序列化ArrayList的实例

我有一个基于json的REST Web服务实现使用:Jetty,Jersey,Jersey-JSON使用Jackson.

我的一个方法接收一个Person实例,它有一个List <String>类型的字段.即:

Public class Person {
    List<String> names;
}
Run Code Online (Sandbox Code Playgroud)

如果我用一系列名字来称呼它,一切正常!例如:

{ "names" : [ "Jhon", "Doe" ] }
Run Code Online (Sandbox Code Playgroud)

但是如果这个人只有一个名字,我的客户就会创建一个单独的值元素,例如:

{ "names" : "Jhon" } 
Run Code Online (Sandbox Code Playgroud)

当我尝试使用单个值调用服务时,我得到一个例外:

Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token
Run Code Online (Sandbox Code Playgroud)

题:

我应该如何创建/配置我的Web服务,以便能够在将数组字段作为单个元素发送给我时反序列化数组字段.

-

我已经读过:

杰克逊反序列化 - 包含ArrayList <T>

如何自定义JAXB对象列表到JSON的序列化?

这是指最后一个答案:

Jersey客户端无法反序列化json服务 - 异常(无法反序列化实例)

Jaxb json缺少一个元素数组的括号

但这些都没有解决问题.

先感谢您!

java rest jax-rs jersey jackson

13
推荐指数
2
解决办法
3万
查看次数

杰克逊反序列化 - 包含ArrayList <T>

美好的一天,

我目前正在集成尝试使用Jackson(使用Jersey)使用生成JSON(用.NET编写)的REST服务.JSON由可能的错误消息和对象数组组成.下面是Jersey的日志记录过滤器返回的JSON示例:

{
    "error":null,
    "object":"[{\"Id\":16,\"Class\":\"ReportType\",\"ClassID\":\"4\",\"ListItemParent_ID\":4,\"Item\":\"Pothole\",\"Description\":\"Pothole\",\"Sequence\":1,\"LastEditDate\":null,\"LastEditor\":null,\"ItemStatus\":\"Active\",\"ItemColor\":\"#00AF64\"}]"
}
Run Code Online (Sandbox Code Playgroud)

我有两个类来表示类型(外部ListResponse):

public class ListResponse { 

    public String error;    
    public ArrayList<ListItem> object;  

    public ListResponse() { 
    }
}
Run Code Online (Sandbox Code Playgroud)

和(内部ListItem):

public class ListItem {
    @JsonProperty("Id")
    public int id;      
    @JsonProperty("Class")
    public String classType;
    @JsonProperty("ClassID")
    public String classId;  
    @JsonProperty("ListItemParent_ID")
    public int parentId;    
    @JsonProperty("Item")
    public String item; 
    @JsonProperty("Description")
    public String description;

    @JsonAnySetter 
    public void handleUnknown(String key, Object value) {}

    public ListItem() {
    }
}
Run Code Online (Sandbox Code Playgroud)

调用并返回JSON的类如下所示:

public class CitizenPlusService {
    private Client client = null;   
    private WebResource service = null;     

    public …
Run Code Online (Sandbox Code Playgroud)

json jackson

4
推荐指数
2
解决办法
2万
查看次数

Android聊天在DataSnapshot.getValue()上崩溃,以获取时间戳

我正在尝试修改Firebase的Android聊天示例以包含Firebase时间戳值.我可以使用时间戳发送,ServerValue.TIMESTAMP;但是当Firebase尝试显示消息时,应用程序崩溃了.编辑:下面的完整错误输出

发送我使用的消息

private void sendMessage() {
    EditText inputText = (EditText)findViewById(R.id.messageInput);
    String input = inputText.getText().toString();
    Map timestamp = ServerValue.TIMESTAMP;

    if (!input.equals("")) {
        // Create our 'model', a Chat object
        Chat chat = new Chat(name, input, timestamp, userID);
        // Create a new, auto-generated child of that chat location, and save our chat data there
        chatRef.push().setValue(chat);
        inputText.setText("");
    }
}
Run Code Online (Sandbox Code Playgroud)

伪造的结构是这样的:

->Messenger
  |--> room
      |--> messages
        |--> messageID
          |--> from: "Name"
          |--> text: "Message"
          |--> timestamp: xxxxxxxxxxxxx
          |--> userID: "id"
Run Code Online (Sandbox Code Playgroud)

和Chat.java

public …
Run Code Online (Sandbox Code Playgroud)

java android firebase

2
推荐指数
2
解决办法
6517
查看次数

标签 统计

jackson ×2

java ×2

android ×1

firebase ×1

jax-rs ×1

jersey ×1

json ×1

rest ×1