【问题标题】:Reset Service can't marshall a jaxb Object without @XmlRootElement没有@XmlRootElement,重置服务无法编组 jaxb 对象
【发布时间】:2018-03-03 14:25:12
【问题描述】:

我正在开发一个 Web 应用程序,并且我有一个生成 xml 的 Rest 服务。标题是这样的

@RequestMapping(value="/{catalogId}",method= RequestMethod.GET,produces = MediaType.APPLICATION_XML)
public @ResponseBody
ResponseEntity<CatalogueType> getCatalog(@PathVariable(value = "catalogId") String catalogId, HttpServletResponse response) throws Exception {

问题是 CatalogueType 是一个 JAXB 对象,但没有 @XmlRootElement 标记,因此我收到 HTTP 406 错误。我无法修改返回类。我怎样才能让它工作?

【问题讨论】:

    标签: xml spring rest spring-boot jaxb


    【解决方案1】:

    如果无法修改 CatalogueType,只需创建另一个类,例如 CatalogueTypeResponse,它的结构与 CatalogueType 相同,并添加所有必需的注释。乍一看,这可能看起来像代码重复,但从你的解释似乎CatalogueType 是控制器内部的东西。但控制器本身通常是记录在案的公共接口,因此返回的对象不应受到CatalogueType 中可能发生的变化的影响。因此,这不是一个坏习惯。

    实际上,您的原始问题对我来说似乎很奇怪,它应该打印 POJO 的 XML/JSON 表示,而不需要任何注释。您是否添加了所有必要的 jar(即 Jackson)?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-14
      • 2016-06-20
      • 2011-09-23
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多