我有这些映射:
@GetMapping("rparam")
public void get(@RequestParam("test") String test) {
System.out.println(test);
}
@PostMapping("rparam")
public void post(@RequestParam("test") String test) {
System.out.println(test);
}
@PatchMapping("rparam")
public void patch(@RequestParam("test") String test) {
System.out.println(test);
}
@DeleteMapping("rparam")
public void delete(@RequestParam("test") String test) {
System.out.println(test);
}
@PutMapping("rparam")
public void put(@RequestParam("test") String test) {
System.out.println(test);
}
除了GetMapping和PostMapping方法之外,所有其他方法都因400 Bad请求而失败,因为它们无法找到测试参数。
编辑: 如何提出请求(帖子有效):
(对数据进行字符串化并添加contentType:application / json也无济于事)
$.ajax({
url: "api/my-controller/rparam",
method: "POST",
data: {
test: "super test"
},
headers: {
"X-XSRF-TOKEN": cookie
}
}).done(function() {
console.log("super cool")
});
$.ajax({
url: "api/my-controller/rparam",
method: "PUT",
data: {
test: "super test"
},
headers: {
"X-XSRF-TOKEN": cookie
}
}).done(function() {
console.log("super cool")
});
编辑:我刚注意到,当我没有对数据进行字符串化并设置contentType时,它将作为表单数据发送。并且通过表单发送数据只支持发布和获取,这可能与它有关吗?
答案 0 :(得分:0)
尝试通过更改方法来提供一些默认值:
public void delete(@RequestParam(value = "test" , defaultValue = "default") String test)
答案 1 :(得分:0)
JsConfig.InitStatics()可以使用各种@RequestParam:
但是,关于语义,PATCH,PUT和DELETE应该接受请求的主体,然后更新/存储/删除由URI标识的资源上的对象。
所以,我建议使用@RequestBody
代替@RequestParam
。
您可以查看@RequestMapping