[英]Using custom JAXB context with Jersey client
我正在使用Jersey客户端1.8 + JAXB。 我想发布一个如下所示的JSON负载:
{
"transactions": [
{
"amount":
{
"currency":"EUR","total":"1"
}
...
}
],
}
我有一个如下所示的DTO:
@XmlRootElement
public class PaymentRequestDTO
{
@XmlElement(name="transactions")
public List<TransactionDTO> getTransactions()
{
return transactions;
}
}
当列表仅包含一项交易时,尽管我发布的内容是:
{
"transactions": {
"amount":
{
"currency":"EUR","total":"1"
}
...
}
}
事务不被视为数组...我已经花了几个小时来研究此问题,包括。 地段SO搜索,我读过,我必须要注册自己的上下文解析器- > 点击这里 。
所以这里是:
@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);
我使用了所谓的自然符号:
利用紧密耦合的JAXB RI集成的自然JSON表示法。
JSON表达式示例:
{“ columns”:[{“ id”:“ userid”,“ label”:“ UserID”},{“ id”:“ name”,“ label”:“ User Name”}]],“ rows”:[{ “用户id”:1621年, “名”: “Grotefend”}]}
链接 。
结果仍然相同-有效负载中没有数组。 我想念什么吗?
有关信息:
我已经激活了POJO映射(意味着在下面使用了jackson),生成的JSON是我所需要的……嗯……
ClientConfig cc = new DefaultClientConfig();
cc.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.