使用Spring 4.1实现基于JSON的REST API时出现错误406

时间:2014-09-15 14:41:14

标签: spring-mvc

我使用Spring 4.1框架实现了很少的REST API。在尝试从浏览器访问REST API时,我收到以下错误:

  

此请求标识的资源只能生成   根据请求具有不可接受的特征的回复   "接受"头。

我已经阅读了其他答案,我可以推断我需要添加正确的Jackson库并在春季正确启用MVC配置。我想我正在做这两件事,但问题仍然存在。除了春季JAR,我还添加了以下杰克逊图书馆:

jackson-annotations-2.4.0.jar jackson-core-2.4.2.jar jackson-core-asl-1.9.13.jar jackson-databind-2.4.2.jar jackson-mapper-asl-1.9.13.jar

我的配置类如下所示:

@EnableWebMvc
@Configuration
class WebMvcConfig extends WebMvcConfigurerAdapter {
    @Bean
    public ViewResolver getViewResolver() {

        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setCache(true);
        resolver.setPrefix("/WEB-INF/jsp/");
        resolver.setSuffix(".jsp");
        return resolver;

    }
}

请求类只是:

@RestController
public class SimpleController {
    @RequestMapping(value = "/example", method = RequestMethod.GET, headers="Accept=*/*", produces="application/json")
    public Account example() {
        //Just return the default data
        return new Account();
    }
}

请帮助。我无法理解,我在这里缺少什么。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

此声明

headers="Accept=*/*"

基本上表明任何Accept标题都是好的。

您的请求包含

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8 

因为您的方法在@RestController范围内,所以Spring会使用RequestResponseBodyMethodProcessor来处理方法的返回值。该过程的一部分是选择可接受的表示。由于您的*/*匹配text/htmltext/html将被选为可接受的代表。

然后,Spring会尝试找到可以将您的返回值转换为HttpMessageConverter的{​​{1}}。它找不到一个,因此会失败。

完全删除text/html属性或将其更改为headers,该请求将与请求的Accept=application/json匹配。