我有一个 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 输出,您有两个选择:
- 使用 Jackson 注释 (
@Json...
)。pageDescription
字段上的@JsonIgnore
应该可以解决问题。 - 包括 Jackson JAXB integration module添加到您的项目并配置 Jackson
ObjectMapper
以包含它(如项目网站上所述)。
我推荐前者,因为它是更简单的方法,并且您可以更好地控制 JSON 渲染。
关于java - JSON 输出不遵循模型中的 JAXB 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24204177/