对象问题类型的 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 class 看起来像这样。
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 字符串中。
如何实现?
看起来这不可能用 moxy 作为 json 映射器。所以我试过杰克逊并且工作正常。在创建客户端时使用了以下内容。
ClientBuilder.newClient()
.property("jersey.config.client.disableMoxyJson", true)
.register(new JacksonJsonProvider(mapper))
我正在使用 jersey2 jaxrs 客户端和默认的 moxy 作为响应映射器。 json 之后是我在服务中的回复 json。
{"key":"thekey","id":"the___id","value":{"imageUrl":"https://asdad","imageType":"asdsadasd"}}
https://api.myjson.com/bins/efe74
但是在我们的业务需要中,无法确定"value"字段的值。有时它可以是数组或对象或只是一个整数。所以基本上我不知道对象的类型。
因此我的 DTO class 看起来像这样。
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 字符串中。
如何实现?
看起来这不可能用 moxy 作为 json 映射器。所以我试过杰克逊并且工作正常。在创建客户端时使用了以下内容。
ClientBuilder.newClient()
.property("jersey.config.client.disableMoxyJson", true)
.register(new JacksonJsonProvider(mapper))