内容类型为application / x-www-form-urlencoded的Http Put请求在Spring中不起作用

时间:2019-03-01 15:24:19

标签: java spring spring-boot spring-mvc postman

我有一个spring-boot应用程序,它唯一要做的就是接收http请求。

这是我的春季婴儿车

@RestController
public class WebController {

    @Autowired
    private CallRecording callRecording;

    @PutMapping(path = "/cdrpostbox/callrecording/{hostedAccountId}/{mp3FileName}", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
    public ResponseEntity<Object> callRecording(@PathVariable("hostedAccountId") String hostedAccountId, @PathVariable("mp3FileName") String mp3FileName, MultipartFile file) {
        return ResponseEntity.status(callRecording.service(hostedAccountId, mp3FileName, file)).body(null);
    }

}

我正在使用邮递员发送请求。我的spring申请收到的请求不能更改,因为我的团队未维护代码。

request headers

request body

我在这里发现了很多类似问题,但不是必须解决的问题。我尝试添加和删除 @RequestBody ,将 @RequestBody 替换为 @RequestParam ,但尝试了 MultiValueMap ,但是不断返回相同的错误。

java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "x"

我什至无法调试代码,因为它在到达控制器之前就失败了。

我想念什么?

2 个答案:

答案 0 :(得分:0)

标头中的内容类型为urlencoded,但是您发送二进制数据。

---编辑

如果要以MultipartFile的形式获取文件,然后从邮递员以表单数据形式发送文件,将数据名称设置为file并将@RequestParam添加到方法中的file参数。 / p>

答案 1 :(得分:0)

经过更多调查,我找到了解决方法。

@RestController
@EnableWebMvc
public class WebController {

    @Autowired
    private CallRecording callRecording;

    @PutMapping(path = "/cdrpostbox/callrecording/{hostedAccountId}/{mp3FileName:.+}")
    public ResponseEntity<Object> callRecording(@PathVariable("hostedAccountId") String hostedAccountId, @PathVariable("mp3FileName") String mp3FileName, @RequestBody byte[] requestBody) {
        return ResponseEntity.status(callRecording.service(hostedAccountId, mp3FileName, requestBody)).body(null);
    }

它缺少@EnableWebMvc。我还更改了映射{mp3FileName:.+},因为它被截断了请求的结尾,您可以检查SO问题here

感谢@Selindek的帮助