Tho*_*Kao 5 xml json jaxb marshalling jaxb2
我有这个@XmlRootElement类Person.
@XmlRootElement
class Person {
private String desc;
}
Run Code Online (Sandbox Code Playgroud)
并且返回内容是
{"Person": {"desc": "abc"} }
Run Code Online (Sandbox Code Playgroud)
我真的不想要root包装器,所以我希望内容看起来像
{"desc": "abc"}
Run Code Online (Sandbox Code Playgroud)
我可以通过JaxB实现这一目标吗?如果是这样,怎么样?谢谢!
JAXB 是 XML 的 API,而不是 JSON。
然而,有一些 JSON 库(至少 Jackson)可以利用 JAXB 注释。我不知道您使用的是哪一种,所以我不知道如何提供最好的帮助。(如果您将其与 Jersey 框架一起使用,它会使用 Jackson 进行 JSON 序列化。)您将需要配置您正在使用的任何 JSON 库,以便能够配置 JSON 输出中根元素的“包装”。
我编写了这个快速 Groovy 脚本来在 Jackson 中进行测试:
@Grab('com.fasterxml.jackson.core:jackson-databind:2.2.2')
import javax.xml.bind.annotation.XmlRootElement
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.SerializationFeature
@XmlRootElement
public class Person {
public String desc = "howdy"
}
Person p = new Person()
ObjectMapper om = new ObjectMapper().enable(SerializationFeature.WRAP_ROOT_VALUE)
println om.writeValueAsString(p)
Run Code Online (Sandbox Code Playgroud)
正如上面所写,它输出 JSON:
{"Person":{"desc":"howdy"}}
Run Code Online (Sandbox Code Playgroud)
如果你取出该部分,.enable(SerializationFeature.WRAP_ROOT_VALUE)它会给你:
{"desc":"howdy"}
Run Code Online (Sandbox Code Playgroud)
因此,如果您使用 Jackson,则看起来后台使用的 ObjectMapper 已被设置为WRAP_ROOT_VALUE,您只需将其关闭即可。
| 归档时间: |
|
| 查看次数: |
7337 次 |
| 最近记录: |