我在Intellij和JBoss服务器中看到了奇怪的行为。 关于申请的简短信息:
- spring 4.3.1
- jersey 1.18.1
- jboss EAP 6.4.0
我遇到了编组问题,所以我尝试深入挖掘并尝试提示:https://docs.jboss.org/resteasy/docs/1.0.0.GA/userguide/html/Content_Marshalling_Providers.html
所以我创建了课程:
@Named
@Provider
@Primary
@Produces(MediaType.APPLICATION_JSON)
public class JerseyJAXBConfiguration implements ContextResolver<JAXBContext> {
private JAXBContext context;
private Class[] types = { SomeClass.class};
public JerseyJAXBConfiguration() throws Exception {
JSONConfiguration.MappedBuilder builder = JSONConfiguration.mapped();
builder.arrays("invite");
builder.rootUnwrapping(false);
this.context = new JSONJAXBContext(builder.build(), types);
}
public JAXBContext getContext(Class<?> objectType) {
for (Class type : types) {
if (type == objectType) {
return context;
}
}
return null;
}
}
我在IntelliJ中有两个JBoss运行配置。首先部署简单的“战争”,第二部署“战争爆炸”。这是一个奇怪的事情。因为在这两种情况下都会在应用程序启动时加载此bean,但仅针对没有爆炸'getContext'方法的情况执行。在这两种情况下,一切都是一样的。运行之间没有任何代码更改。 有人可以向我解释为什么我们有这个不同?我想知道在“战争爆炸”的情况下执行了什么JAXB实现。
我看到它的主要原因是因为Web服务创建的Json在提到的情况下也是不同的。有“命名”数组第二个没有。
如果'战争':
{"functionGroupAutoFill": [
{
"desc": "0. General",
"id": "0"
},
{
"desc": "00. General",
"id": "00"
},
...
]}
如果'战争爆炸':
[
{
"desc": "0. General",
"id": "0"
},
{
"desc": "00. General",
"id": "00"
},
...
]