当前位置: 首页 > 知识库问答 >
问题:

Spring Boot RequestMapping在返回JAXB注释对象时产生值返回406错误

洪逸清
2023-03-14

我正在创建一个Spring Boot应用程序来替换一个遗留的api应用程序,所以所有的路由/header/etc都已经固定下来了。在那个遗留应用程序中,我们使用自定义Accept头来包含版本和内容类型。因此,我们的Accept标头如下所示:

xml或catalog.v2.json等。

下面是处理请求的方法的请求映射。我现在正在尝试处理v1.xml。Spring找到了正确的方法,整个方法被执行并返回我的JAXB注释对象:

@RequestMapping(value = "/catalog", method = RequestMethod.GET, produces="application/catalog.v1.xml")

我如何确保Spring基于Accept头找到这个匹配的处理程序方法,但知道输出应该是XML,并相应地marshall我的JAXB对象?

共有1个答案

寿高阳
2023-03-14

您需要为Spring MVC提供用于自定义媒体类型的HttpMessageConverter。为此,我将利用Spring Boot自动将任何HttpMessageConverterbean添加到Spring MVC的默认配置中,方法是配置一个知道如何转换application/catalog.v1.xml的bean:

@Bean
public Jaxb2RootElementHttpMessageConverter catalogXmlConverter() {
    Jaxb2RootElementHttpMessageConverter xmlConverter = new Jaxb2RootElementHttpMessageConverter();
    xmlConverter.setSupportedMediaTypes(Arrays.asList(new MediaType("application", "catalog.v1.xml")));
    return xmlConverter;
} 
 类似资料:
  • 当在testng单元testcase中运行时,JAXB将XML文件解组到对象中工作正常。 当相同的代码被用来在另一个进程中解封相同的XML文件时,我得到了一个空对象。我可以验证对象是为XML文档中的每个元素创建的,并且所有适配器都被调用。在unmarshaller中设置事件处理程序,但没有验证问题。当我设置xmlns属性和前缀时,即使返回空对象,行为也略有不同。 我看了好几篇文章,但都无法与我面临

  • @ResponseBody无法返回forma json,我在浏览器上获得了Etat HTTP 406 我正在使用:jackson-core-asl 1.9.3和ajckson-mapper-asl 1.9.3 Getjson: Spring: 我的servelet-context: 我通过这个url进入浏览器: http://othman-pc.com:8080/dsi/natureparoper

  • 因为 Vue 的声明文件天生就具有循环性,TypeScript 可能在推断某个方法的类型的时候存在困难。因此,你可能需要在render或computed里的方法上标注返回值。 import Vue, { VNode } from 'vue' const Component = Vue.extend({ data () { return { msg: 'Hello'

  • 问题内容: 我正在使用Ajax简化Spring 3.0文章中指定的带有JSON的Spring MVC 。 根据各种论坛上的建议对我的代码进行了无数次尝试和修改之后,我的代码仍然无法正常工作。 我继续收到以下错误:(406)根据请求“接受”标头(),此请求标识的资源只能生成特性不可接受的响应。 根据需要,我在appconfig.xml中。 app-config.xml mvc-config.xml

  • 问题内容: 我在使用Ajax时遇到问题。 问题是,在获得ajax响应之前,它会返回cnt。因此它总是返回NULL。 有没有办法使正确的返回响应值? 谢谢! 问题答案: 由于AJAX请求是异步的,因此您的cnt变量将在请求返回并调用成功处理程序之前返回。 我建议重构您的代码以解决此问题。 一种方法是从AJAX请求的成功处理程序中调用调用了GetGrantAmazonItemCnt()的任何函数,此方

  • 生成器返回值 PHP7支持通过Generator::getReturn获取生成器方法return的返回值。 PHP5中我们约定使用Generator最后一次yield值作为返回值。 <?php final class AsyncTask { public function begin() { return $this->next(); } //