我有一个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申请收到的请求不能更改,因为我的团队未维护代码。
我在这里发现了很多类似问题,但不是必须解决的问题。我尝试添加和删除 @RequestBody ,将 @RequestBody 替换为 @RequestParam ,但尝试了 MultiValueMap ,但是不断返回相同的错误。
java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "x"
我什至无法调试代码,因为它在到达控制器之前就失败了。
我想念什么?
答案 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的帮助