良い一日、
私は現在、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\"}]"
}
タイプ (外側の ListResponse) を表す 2 つのクラスがあります。
public class ListResponse {
public String error;
public ArrayList<ListItem> object;
public ListResponse() {
}
}
および (内側の 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() {
}
}
JSON を呼び出して返すクラスは次のようになります。
public class CitizenPlusService {
private Client client = null;
private WebResource service = null;
public CitizenPlusService() {
initializeService("http://localhost:59105/PlusService/");
}
private void initializeService(String baseURI) {
// Use the default client configuration.
ClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getClasses().add(JacksonJsonProvider.class);
client = Client.create(clientConfig);
// Add a logging filter to track communication between server and client.
client.addFilter(new LoggingFilter());
// Add the base URI
service = client.resource(UriBuilder.fromUri(baseURI).build());
}
public ListResponse getListItems(String id) throws Exception
{
ListResponse response = service.path("GetListItems").path(id).accept(MediaType.APPLICATION_JSON_TYPE, MediaType.APPLICATION_XML_TYPE).get(ListResponse.class);
return response;
}
}
ここで重要な呼び出しは getListItems メソッドです。テスト ハーネスでコードを実行すると、次の結果が生成されます。
org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token
at [Source: java.io.StringReader@49497eb8; line: 1, column: 14] (through reference chain: citizenplus.types.ListResponse["object"])
手伝ってください。
よろしく、 カール・ピーター・マイヤー