繁体   English   中英

Jersey JaxB 解组对象类型问题

[英]Jersey JaxB unmarshalling of type Object issue

我使用 jersey2 jaxrs 客户端和默认的 moxy 作为响应映射器。 以下 json 是我来自服务的响应 json。

{"key":"thekey","id":"the___id","value":{"imageUrl":"https://asdad","imageType":"asdsadasd"}}

https://api.myjson.com/bins/efe74

但是在我们的业务需求中,“value”字段的值是无法确定的。 有时它可以是一个数组或一个对象或只是一个整数。 所以基本上我不知道对象的类型。

因此,我的 DTO 类看起来像这样。

public class FieldData {
  private String id;
  private String key;
  private Object value;

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }


  public String getKey() {
    return key;
  }

  public void setKey(String value) {
    this.value = value;
  }

  public Object getValue() {
    return value;
  }

  public void setValue(Object value) {
    this.value = value;
  }
}

jersey2 默认使用 moxy 和 JAXB 作为响应映射器。 现在问题是 id 和键值正确映射,因为它知道具体类型。

但是 value 字段在客户端转换为 XML 字符串。

{
     "key":"thekey",
     "id":"the___id",
     "value": "<? xml version="1.0" encoding="UTF-8"?><value imageUrl=\"https://asdad\" imageType=\"asdsadasd\"><imageUrl></imageUrl></value>"
   }

我可以理解,因为对象类型 JAXB 可能无法知道具体类型。 但我所期望的是这个值字段响应应该在 JSON 中,而不是这个格式错误的 XML 字符串。

如何实现这一目标?

看起来 moxy 作为 json 映射器是不可能的。 所以我试过杰克逊并且工作正常。 在客户端创建中使用了以下内容。

ClientBuilder.newClient()
       .property("jersey.config.client.disableMoxyJson", true)
       .register(new JacksonJsonProvider(mapper)) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM