我正在使用resteasy在一些宁静的Web服务之间发送键/值对.
发布这些对的列表我使用此代码段
List 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 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 properties = new ArrayList<>();
//fill List from data
return Response.ok().entity(properties).build();
客户方是:
Response response = request.get("http://getUrl.../"+id);
List 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 cannot be cast to Pair
属性如何是LinkedHashMap,或者更确切地说:LinkedHashMaps列表?
解决方法:
没有类型信息(当你使用readEntity时),Jackson(底层反序列化器)会将任意JSON对象转换为LinkedHashMap.
使用readEntity时,使用GenericType提供泛型类型信息.
List properties = response.readEntity(new GenericType>(){});
标签:java,jax-rs
来源: https://codeday.me/bug/20190623/1266202.html