【发布时间】:2014-07-30 05:19:28
【问题描述】:
我有一个使用 Spring (v4.0.5) 的 http 服务。它的 http 端点是使用 Spring Web MVC 配置的。响应是从模式生成的带有 JAXB2 注释的类。响应包含在 JAXBElement 中,因为生成的 JAXB 类不包含 @XmlRootElement 注释(并且无法修改模式以对此进行修改)。我必须 fight a bit 让 XML 编组工作;无论如何,它正在工作。
现在我正在设置 JSON 编组。我遇到的是获取具有JAXBElement“信封”的 JSON 文档。
{
"declaredType": "io.github.gv0tch0.sotaro.SayWhat",
"globalScope": true,
"name": "{urn:io:github:gv0tch0:sotaro}say",
"nil": false,
"scope": "javax.xml.bind.JAXBElement$GlobalScope",
"typeSubstituted": false,
"value": {
"what": "what",
"when": "2014-06-09T15:56:46Z"
}
}
我想要编组的只是value-object:
{
"what": "what",
"when": "2014-06-09T15:56:46Z"
}
这是我的 JSON 编组配置(spring 上下文配置的一部分):
<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="jacksonMapper" />
<property name="supportedMediaTypes" value="application/json" />
</bean>
<bean id="jacksonMapper" class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd'T'HH:mm:ss'Z'" />
<property name="timeZone">
<bean class="java.util.TimeZone" factory-method="getTimeZone">
<constructor-arg type="java.lang.String" value="UTC" />
</bean>
</property>
</bean>
</property>
</bean>
我希望这可以通过配置ObjectMapper 来实现。我想或者推出我自己的序列化程序可能会起作用。想法?有什么建议吗?
【问题讨论】:
-
被编组的响应对象是由
xjc(JAXB2 绑定编译器)从模式中生成的。您是否建议以某种方式注释这些内容?即使这以某种方式完成,这些仍然被包裹在JAXBElement-s 中,它们本身不能被@JsonValue-annotated... -
好的。请看我的回答。
标签: java json spring jackson jaxbelement