我使用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();
}
}
请帮助。我无法理解,我在这里缺少什么。 提前谢谢。
答案 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/html
,text/html
将被选为可接受的代表。
然后,Spring会尝试找到可以将您的返回值转换为HttpMessageConverter
的{{1}}。它找不到一个,因此会失败。
完全删除text/html
属性或将其更改为headers
,该请求将与请求的Accept=application/json
匹配。