将自定义 JAXB 上下文与 Jersey 客户端一起使用
Using custom JAXB context with Jersey client
我正在使用 Jersey 客户端 1.8 + JAXB。我想要 post 一个 JSON 有效负载,如下所示:
{
"transactions": [
{
"amount":
{
"currency":"EUR","total":"1"
}
...
}
],
}
我有一个如下所示的 DTO:
@XmlRootElement
public class PaymentRequestDTO
{
@XmlElement(name="transactions")
public List<TransactionDTO> getTransactions()
{
return transactions;
}
}
当列表只包含一笔交易时,我post是:
{
"transactions": {
"amount":
{
"currency":"EUR","total":"1"
}
...
}
}
事务不被视为数组...我已经浪费了几个小时来研究这个问题,包括。在 SO 中进行了大量搜索,我读到我必须注册自己的上下文解析器 -> here。
这里是:
@Provider
public class XXXJAXBContextResolver implements ContextResolver<JAXBContext>
{
private JAXBContext context;
private Class<?>[] types = { PaymentRequestDTO.class, TransactionDTO.class, AmountDTO.class };
public XXXJAXBContextResolver() throws Exception
{
this.context = new JSONJAXBContext(JSONConfiguration.natural().build(), types);
}
@Override
public JAXBContext getContext(Class<?> objectType)
{
for (Class<?> type : types)
{
if (type == objectType)
{
return context;
}
}
return null;
}
}
注册本身:
ClientConfig cc = new DefaultClientConfig();
cc.getClasses().add(XXXJAXBContextResolver.class);
client = Client.create(cc);
我用过所谓的自然表示法:
The natural JSON notation, leveraging closely-coupled JAXB RI
integration.
Example JSON expression:
{"columns":[{"id":"userid","label":"UserID"},{"id":"name","label":"User
Name"}],"rows":[{"userid":1621,"name":"Grotefend"}]}
Link.
仍然是相同的结果 - 负载中没有数组。我错过了什么吗?
参考资料:
我已经激活了POJO映射(意味着下面使用了jackson)并且生成的JSON是我需要的......嗯......
ClientConfig cc = new DefaultClientConfig();
cc.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
我正在使用 Jersey 客户端 1.8 + JAXB。我想要 post 一个 JSON 有效负载,如下所示:
{
"transactions": [
{
"amount":
{
"currency":"EUR","total":"1"
}
...
}
],
}
我有一个如下所示的 DTO:
@XmlRootElement
public class PaymentRequestDTO
{
@XmlElement(name="transactions")
public List<TransactionDTO> getTransactions()
{
return transactions;
}
}
当列表只包含一笔交易时,我post是:
{
"transactions": {
"amount":
{
"currency":"EUR","total":"1"
}
...
}
}
事务不被视为数组...我已经浪费了几个小时来研究这个问题,包括。在 SO 中进行了大量搜索,我读到我必须注册自己的上下文解析器 -> here。
这里是:
@Provider
public class XXXJAXBContextResolver implements ContextResolver<JAXBContext>
{
private JAXBContext context;
private Class<?>[] types = { PaymentRequestDTO.class, TransactionDTO.class, AmountDTO.class };
public XXXJAXBContextResolver() throws Exception
{
this.context = new JSONJAXBContext(JSONConfiguration.natural().build(), types);
}
@Override
public JAXBContext getContext(Class<?> objectType)
{
for (Class<?> type : types)
{
if (type == objectType)
{
return context;
}
}
return null;
}
}
注册本身:
ClientConfig cc = new DefaultClientConfig();
cc.getClasses().add(XXXJAXBContextResolver.class);
client = Client.create(cc);
我用过所谓的自然表示法:
The natural JSON notation, leveraging closely-coupled JAXB RI integration.
Example JSON expression:
{"columns":[{"id":"userid","label":"UserID"},{"id":"name","label":"User Name"}],"rows":[{"userid":1621,"name":"Grotefend"}]}
Link.
仍然是相同的结果 - 负载中没有数组。我错过了什么吗?
参考资料:
我已经激活了POJO映射(意味着下面使用了jackson)并且生成的JSON是我需要的......嗯......
ClientConfig cc = new DefaultClientConfig();
cc.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);