Spring 引导没有获取请求正文中的参数。控制器的定义如下:
@PostMapping("/login")
public @ResponseBody User login(@RequestBody String username, @RequestBody String password) {
return userService.login(username,password);
}
和React中的获取
const LogFunc = async () => {
let url = new URL("http://localhost:8080/user/login");
let params = {
username: username,
password: password
}
console.log(JSON.stringify(params));
return fetch(url, {
method: 'POST',
headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' },
body: JSON.stringify(params)
当我控制台时.log它,它像打印它一样
{"username":"allanosi","password":"cap"}
这是正确的,但当Spring收到它时,它会打印:
Required request body is missing: public com.formacion.back.entities.User com.formacion.back.controllers.UserController.login(java.lang.String,java.lang.String)]
在网络部分,它说这是一个糟糕的请求,但我不知道为什么。
先谢谢你。
你能试试这个吗?把注释换成这个就行了。
@RequestMapping(
value = "/login",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
另一个猜测,Spring启动是等待字符串而不是对象,这就是为什么您可能会收到请求正文丢失错误的原因。你可以试试这个:
public @ResponseBody User login(@RequestBody Map<String, String> userData) {
// your code
}
也许你可以试试这个:
const fdata = new FormData();
fdata.append('username', 'diego');
fdata.append('password', '1242342');
fetch(url, {
method: 'POST',
headers: ...,
body: fdata,
});
我和你有同样的问题,这种方法解决了我的问题。