java - JSON 输出不遵循模型中的 JAXB 注释

标签 java xml json spring-mvc jaxb

我有一个 Spring MVC Web 应用程序,它使用 Hibernate 进行数据库持久性。我希望使用现有模型能够从 Controller 输出 XML 或 JSON。

我使用 JAXB 注释配置了所需的数据库模型,并且仅希望在输出中返回特定参数(数据库模型示例):

@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
 public class BaseModel {
    @XmlAttribute
    String pageTitle;
    @XmlTransient
    String pageDescription;

输出 XML 的相应 Controller 就是

@RequestMapping(value = "/basemodel/raw/xml/{id}", method = RequestMethod.GET, produces = "application/xml")
public @ResponseBody BaseModel getBaseModel(@PathVariable("id") int id){
    return service.findBaseModel(id);
}

这将为我提供所需的 XML 输出,仅将 pageTitle 作为属性输出,而 pageDescription 被忽略。

现在,如果我稍微调整我的 Controller 来生成 JSON

@RequestMapping(value = "/basemodel/raw/json/{id}", method = RequestMethod.GET, produces = "application/json")
public @ResponseBody BaseModel getBaseModel2(@PathVariable("id") int id){
    return service.findBaseModel(id);
}

相应的 json 输出将返回 pageTitle 和 pageDescription 作为属性(我不想要)。

我知道有一些库可以满足我想要完成的任务,但我似乎无法很好地掌握哪个库是理想的,而且还找到了一个教程来配置我的应用程序以使用这些库。有人可以指导我正确的方向吗?谢谢。

最佳答案

如果您呈现 JSON,则将考虑 JAXB 注释,因为 JAXB 用于绑定(bind)和呈现 XML(正如项目名称和注释实际上所暗示的那样)。

如果您想自定义 JSON 输出,您有两个选择:

  1. 使用 Jackson 注释 (@Json...)。 pageDescription 字段上的 @JsonIgnore 应该可以解决问题。
  2. 包括 Jackson JAXB integration module添加到您的项目并配置 Jackson ObjectMapper 以包含它(如项目网站上所述)。

我推荐前者,因为它是更简单的方法,并且您可以更好地控制 JSON 渲染。

关于java - JSON 输出不遵循模型中的 JAXB 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24204177/

相关文章:

java - 我可以为这个程序编写什么断言测试用例?

java - 遍历所有 main() 参数

java - 无法在 Intellij 中编译 - 错误 :java: exporting a package from system module jdk. 不允许使用 --release 编译器

c# - 如何提高 Json 解析代码的效率?

java - 使用 JsonPath 提取非同质列表作为类型化对象

php - FOSRestBundle 设置返回 JSON 但仍然要求 Twig 模板

java - 简单的 OpenGL 着色器在 LibGDX 中给出错误(没有名为 diffuseTexture 的统一)

java - Spring Autowire XML : value is not facet-valid with respect to enumeration

xml - 在 actionscript 中,检查 xml 节点属性是否存在的最佳方法是什么?

java - 不幸的是,我的 android studio 应用程序在我的设备 Redmi 2 Prime 中停止了,但它在 Nexus 模拟器中运行