SpringMVC RequestMapping:将.xml添加到控制器路径以获取xml响应

时间:2016-11-22 14:25:20

标签: xml spring spring-mvc kotlin request-mapping

/ pets产生json响应。我想在控制器上维护@RequestMapping(" pets")时使用/pets.xml来产生xml响应。我可以用

@RequestMapping("/index") 
@RequestMapping("/index.xml") 

作为一种解决方法,但这不是我正在寻找的。

@RestController
@RequestMapping("pets")
class PetController {
  /*code*/
  @RequestMapping(produces = arrayOf("application/json"))
    fun findPetsJson(): List<PetDto> {
      return petService.findAll()
  }
  // this results in /pets/.xml for the xml response. I'm aiming for /pets.xml
  @RequestMapping(".xml", produces = arrayOf("application/xml"))
    fun findPetsXml(): List<PetDto> {
      return petService.findAll()
    }
  }

2 个答案:

答案 0 :(得分:1)

默认情况下,Spring MVC RequestMappingHandlerMapping将为您的@RequestMapping带注释的方法(或类)添加多个映射。它将在配置的一个旁边添加一个以.*结尾,以便它也匹配扩展名。

因此,在您的情况下,默认情况下创建的/pets.xml映射已支持/pets.*。您的produces现在仅根据Accept请求标头限制接受请求。

默认情况下,文件扩展名优先于Content-Type标头。

答案 1 :(得分:0)

只有一个功能就足够了。你只需要向它添加arrayOf(“application / json”,“application / xml”),它就会生成两者(即使你删除了它,它实际上也是如此,但它显然是这样的。

@RestController
@RequestMapping("pets")
class PetController {
  /*code*/
  @RequestMapping(produces = arrayOf("application/json", "application/xml), method = RequestMethod.GET)
    fun findPetsJson(): List<PetDto> {
      return petService.findAll()
  }
}

此代码允许在/pets.json和/pets.xml

进行交互