我有一个基于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服务,以便能够在将数组字段作为单个元素发送给我时反序列化数组字段.
-
我已经读过:
和
这是指最后一个答案:
Jersey客户端无法反序列化json服务 - 异常(无法反序列化实例)
但这些都没有解决问题.
先感谢您!
美好的一天,
我目前正在集成尝试使用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) 我正在尝试修改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)