xml – 如何在Spring MVC中配置自定义MediaType?
使用
Spring MVC,我已经有了
JSON和XML媒体格式的控制器.
在内容协商配置中,我只想依赖Accept头,并引入自定义名称媒体类型,例如:“myXml” 我的配置: @Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigurerAdapter { @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer .favorPathExtension(false) .favorParameter(false) .ignoreAcceptHeader(false) .useJaf(false) .mediaType(MediaType.APPLICATION_JSON_VALUE,MediaType.APPLICATION_JSON) .mediaType(MediaType.APPLICATION_XML_VALUE,MediaType.APPLICATION_XML) .mediaType("myXml",MediaType.APPLICATION_XML) .defaultContentType(MediaType.APPLICATION_JSON); } } 我的控制器: @RequestMapping(value = "/manager/{id}",method = RequestMethod.GET,produces = {MediaType.APPLICATION_XML_VALUE,MediaType.APPLICATION_JSON_VALUE} ) @ResponseBody public Manager managers(@PathVariable long id){ return repo.getManagerById(id); } 它工作得很好,Accept header:application / json生成JSON,application / xml生成XML.其他任何东西都返回406 Not Acceptable,即使是myXml. 我期待xml虽然…… 解决方法
使用该配置,您基本上:
>使用参数或路径扩展忽略内容协商 我不认为你打算像这样处理内容协商. 您可能想要自定义HttpMessageConverters(see here),例如注册Jaxb2RootElementHttpMessageConverter(如果使用JAXB)或MappingJackson2XmlHttpMessageConverter(如果使用Jackson)并使用“application / xml”和“myXml”媒体类型注册它们. 另外,不要忘记在RequestMapping注释的“produce”部分添加“myXml” – 您的控制器方法应该将其声明为它可以生成的媒体类型,否则它将再次抛出406. 我的建议 你应该使用像“application / vnd.foobar.v.1.0 xml”这样的媒体类型,因为: >这与http客户端有关 在这种情况下,您可以在配置中保留defaultContentType部分(并可能将其设置为您的自定义媒体类型)并丢弃其余部分. 在任何情况下,您仍应在映射注释的produce部分中声明此自定义媒体类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- TWaver图形界面之道(二)TWaver介绍
- c# – 限制TextBox中的字符
- Oracle中rank() over, dense_rank(), row_number() 的区别
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第十五课:C
- c – 导出功能到DLL没有类
- ruby – 如果产品标签包含 – 在shopify中
- ajax案例-ajax+js+dom+json+php+mysql仿google分页1
- PDF帐票工具:JasperReports+iReport
- NoSQL数据库_MongoDB_MongoDB 文档与集合
- ruby-on-rails – 想在Heroku上使用Redis(Redis :: CannotC