提问者:小点点

Spring启动无法识别反应获取主体


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)]

在网络部分,它说这是一个糟糕的请求,但我不知道为什么。

先谢谢你。


共2个答案

匿名用户

你能试试这个吗?把注释换成这个就行了。

@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,
});

我和你有同样的问题,这种方法解决了我的问题。