2017-01-31 9 views
3

Я использую 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 может правильно прочитать список.

Теперь другой путь проблема:

извлечения ресурсов определяется как:

@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 не может быть приведен к Сопряжение

Как propertiesLinkedHashMap в этой точке, или, вернее, список связанных ссылок?

ответ

2

Без информации о типе (при использовании readEntity) Джексон (базовый десериализатор) преобразует произвольные объекты JSON в LinkedHashMap.

При использовании readEntity вы предоставляете информацию о типовом типе с использованием GenericType.

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