java - Jersey JaxB 类型对象的反编码问题

标签 java jaxb jersey-2.0

我使用 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 和键值被正确映射,因为它知 Prop 体类型。

但是值字段在客户端中被转换为 XML 字符串。

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

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

如何实现这一目标?

最佳答案

看起来这对于 moxy 作为 json 映射器来说是不可能的。所以我和 jackson 一起尝试过,效果很好。在客户端创建时使用以下内容。

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

关于java - Jersey JaxB 类型对象的反编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60448669/

相关文章:

spring - Jersey中是否有类似于Spring的HandlerInterceptor的Interceptor

java - 当 processElement 的输出为 fat 时处理内存不足异常

java - 如何在ant中复用依赖的项目?

java - JAXB 与应用程序其余部分之间的方法冲突

java - 在 Jersey 中不包含证书的情况下,Rest api 如何工作?

java - 泽西客户端 NoSuchMethodError : org. glassfish.jersey.client.ClientRequest.getLengthLong()J

java - Play Framework 2.5 应用程序在没有明显原因的情况下崩溃

java - 想要获取枚举值而不是 JSON 中的名称

java - 具有默认无参数构造函数时出现解码错误 Jaxb - "Class does not have a default no arg constructor"

java - JAXB 编码 XMPP 节