如果没有@XmlRootElement,重置服务无法编组jaxb对象

时间:2017-09-22 05:26:19

标签: xml spring rest spring-boot jaxb

我正在开发一个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错误。我无法修改返回类。我怎样才能使这个工作?

1 个答案:

答案 0 :(得分:0)

如果无法修改CatalogueType只需创建另一个类,请说CatalogueTypeResponseCatalogueType具有相同的结构,并添加所有必需的注释。从第一眼看,这可能看起来像代码重复,但从你的解释看来,CatalogueType是控制器内部的东西。但控制器本身通常是文档化的公共接口,因此返回的对象不应受CatalogueType中可能的更改的影响。因此,这不是一个坏习惯。

实际上你的原始问题对我来说似乎很奇怪,它应该打印POJO的XML / JSON表示而不需要任何注释。你有没有添加所有必要的罐子(即杰克逊)?