【问题标题】:Resteasy converting List to LinkedHashMapResteasy 将 List 转换为 LinkedHashMap
【发布时间】:2017-01-31 23:33:45
【问题描述】:

我正在使用 resteasy 在一些 RESTful Web 服务之间发送键/值对。

要发布这些对的列表,我使用这个 sn-p

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 不能转换为 Pair

此时propertiesLinkedHashMap,或者更确切地说:LinkedHashMaps 的列表?

【问题讨论】:

    标签: java jax-rs


    【解决方案1】:

    没有类型信息(当您使用 readEntity 时),Jackson(底层反序列化器)会将任意 JSON 对象转换为 LinkedHashMap

    使用readEntity 时,您可以使用GenericType 提供泛型类型信息。

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

    【讨论】:

      猜你喜欢
      • 2019-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      相关资源
      最近更新 更多