Spring 控制器 Npt 能够处理多种媒体类型

问题描述 投票:0回答:1

我有一个简单的休息控制器:

@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}

我知道允许单个控制器根据请求接受多个表单可能有点奇怪,但考虑到有一个选项可以注入媒体类型数组,肯定是允许的?

java spring spring-boot spring-mvc
1个回答
0
投票

你可以这样尝试

@PostMapping("/consumeProto")
public ResponseDto consumeProto(@RequestBody RequestDto requestDto) {...}
© www.soinside.com 2019 - 2024. All rights reserved.