我有一个简单的休息控制器:
@RequestMapping(method = RequestMethod.POST, value = "/consumeProto",
consumes = {APPLICATION_PROTOBUF_VALUE, APPLICATION_JSON_VALUE, APPLICATION_JSON_UTF8_VALUE},
produces = {APPLICATION_PROTOBUF_VALUE, APPLICATION_JSON_VALUE})
@ResponseBody
public ResponseDto consumeProto(@RequestBody RequestDto requestDto) {
System.out.println("Consumer application has received the message");
System.out.println(requestDto);
RequestDto res = RequestDto.newBuilder()
.setStatus(CREATED)
.build();
return res;
}
我有另一个 sprint 启动应用程序,它能够向此端点发送 protobuf 消息。但是当我尝试将 JSON 等效项发送到此端点时,我得到了
[org.springframework.web.HttpMediaTypeNotSupportedException: Content-Type 'application/json;charset=UTF-8' is not supported]
。我的印象是控制器能够处理多种媒体类型,因为 consumes
值是一个数组(即 {APPLICATION_PROTOBUF_VALUE, APPLICATION_JSON_VALUE, APPLICATION_JSON_UTF8_VALUE}
。
我知道允许单个控制器根据请求接受多个表单可能有点奇怪,但考虑到有一个选项可以注入媒体类型数组,肯定是允许的?
你可以这样尝试
@PostMapping("/consumeProto")
public ResponseDto consumeProto(@RequestBody RequestDto requestDto) {...}