2017-01-31 5 views
3

私はresteasyを使用して、いくつかの安らかなWebサービスの間でキー/値のペアを送信しています。私はリストを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 

ターゲット・リソースを持つだけで注釈なしクラスであるANを経由して、これを受け取る:

@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()); 

一覧nullではありません。

サイズは正しいです。

[0] {"name": "value"};

これは奇妙なフォーマットの理由が続いている:java.util.LinkedHashMapは、この時点でpropertiesLinkedHashMapでどのように

をペアにキャストすることはできません

:例外があることを私に伝えますLinkedHashMapsのリスト

答えて

2

タイプ情報がなく(readEntityを使用している場合)、ジャクソン(基礎となるデシリアライザ)は任意のJSONオブジェクトをLinkedHashMapに変換します。

readEntityを使用する場合は、GenericTypeを使用して汎用タイプ情報を指定します。

List<Pair> properties = response.readEntity(new GenericType<List<Pair>>(){}); 
関連する問題