2017-01-31 42 views
3

我使用resteasy在一些寧靜的web服務之間發送鍵/值對。Resteasy將列表轉換爲LinkedHashMap

張貼這些對我用這個片段

List<Pair> pairs = new ArrayList<>(); 
pairs.add(new Pair("name", "Arnold")); 
pairs.add(new Pair("age", "20")); 

ResteasyClient resteasyClient = getClient(); 
ResteasyWebTarget target = resteasyClient.target(targetURI); 
Invocation.Builder request = target.request(); 
request.post(Entity.entity(entity, MediaType.APPLICATION_JSON_TYPE)); 

Pair的名單只是用

public String key, 
public String value 
default constructor 
(key,value) constructor 

目標資源的未加分類的經收到此:

@POST 
@Path("/metadata") 
@Consumes(MediaType.APPLICATION_JSON) 
public Response postMetadata(List<Pair> properties) {... 

jax-rs資源可以正確讀取List。

現在的其他方式的問題是:

的檢索資源被定義爲:

@GET 
@Path("/getUrl.../{id}") 
@Produces(MediaType.APPLICATION_JSON) 
public Response getMetadata(@PathParam("id") String id) { 
data_from_hibernate = em.find(id); 
... 
List<Pair> properties = new ArrayList<>(); 
//fill List from data 
return Response.ok().entity(properties).build(); 

客戶側是:

Response response = request.get("http://getUrl.../"+id); 
List<Pair> properties = response.readEntity(List.class); 

logger.info("got properties != null? " +(properties!=null)); 
logger.info("size: "+properties.size()); 
logger.info("[0]" + properties.get(0)); 
logger.info("type: "+properties.get(0).getClass().getName()); 

列表不爲空;

大小是否正確; get(0)以奇怪的格式輸出:[0] {「name」:「value」};

,這是後面的怪格式的理由是:一個異常告訴我說:

java.util.LinkedHashMap中不能轉換配對

如何爲properties一個LinkedHashMap在這一點上,或者更確切地說:LinkedHashMaps列表?

回答

2

沒有類型信息(當您使用readEntity時),Jackson(底層解串器)會將任意JSON對象轉換爲LinkedHashMap

使用readEntity時,通過使用GenericType提供了通用類型信息。

List<Pair> properties = response.readEntity(new GenericType<List<Pair>>(){});