Jersey JaxB解组类型的对象问题

问题描述 投票:0回答:1

我正在使用jersey2 jaxrs客户端和默认的moxy作为响应映射器。json后面是我从服务返回的json。

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

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

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

由于这个原因,我的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和键值正确映射,因为它知道具体的类型。

但是值字段在客户端中转换为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字符串中。

如何实现?

java jaxb jersey-2.0
1个回答
0
投票

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

ClientBuilder.newClient()
       .property("jersey.config.client.disableMoxyJson", true)
       .register(new JacksonJsonProvider(mapper)) 
© www.soinside.com 2019 - 2024. All rights reserved.