【发布时间】:2016-09-16 15:13:29
【问题描述】:
如何配置 Spring Boot RestController 以接受 YAML 上传?
下面的结果是 415。我可以通过调试看到我的 Spring 上下文中的 MappingJackson2HttpMessageConverter 实例仅支持 [application/json;charset=UTF-8, application/*+json;charset=UTF-8]。我不能是唯一一个尝试这样做的 Spring Boot 用户,我很惊讶它不能正常工作 - 大多数事情都在 Spring Boot 中完成!
我的 POM 中有 YAML 数据格式:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>
我的 RestController 有一个方法:
@RequestMapping(method=RequestMethod.POST, value="/", consumes="application/yaml")
public String upload(@RequestBody Declaration declaration) {
//Do stuff
}
我的测试:
@Test
public void triggersConvergence() throws Exception {
ClassPathResource fixture = new ClassPathResource("declaration.yml");
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Content-Type", "application/yaml");
requestHeaders.add("Accept", "application/json");
URI uri = new URI("http://127.0.0.1:"+port);
byte[] bytes = new byte[(int)fixture.contentLength()];
fixture.getInputStream().read(bytes);
RequestEntity<byte[]> postRequest = new RequestEntity<byte[]>(bytes, requestHeaders, HttpMethod.POST, uri);
ResponseEntity<String> response = rest.exchange(postRequest, String.class);
assertThat(response.getStatusCode(), is(HttpStatus.OK));
assertThat(response.getBody(), is("Converged org my-lovely-org"));
}
【问题讨论】:
-
您要上传还是要提交表示为 YAML 的对象。因为两者都是完全不同的问题(和解决方案)。
标签: java spring-boot jackson yaml