java list 转hashmap_java – Resteasy将List转换为LinkedHashMap

我正在使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值