【问题标题】:Spring framework HttpMessageNotReadableException: Required request body is missingSpring框架HttpMessageNotReadableException:缺少所需的请求正文
【发布时间】:2020-04-01 12:18:48
【问题描述】:

我正在尝试在 React 中向Spring 中的后端服务器发出发布请求,但不断收到以下错误:

[错误] - org.springframework.http.converter.HttpMessageNotReadableException: 缺少必需的请求正文。

它在邮递员上运行良好。

反应部分的代码:

let testeDTO = JSON.stringify({
  email: "teste@@teste.com",
  senha: "1234",
  grupo: 1
});

axios
  .post("http://192.168.0.49:8080/site/login/", testeDTO, {
    headers: {
      "Content-Type": "application/json"
    }
  })
  .then(response => {
    console.log(response);
  })
  .catch(erro => {
    console.log(erro.response);
  });

rest 控制器上的注解:

@RestController
@RequestMapping("/site/login")

来自 Spring 的代码:

@PostMapping
public testeDTO login(@RequestBody TesteDTO testeDTO) {

}

CORS 类:

@WebFilter(urlPatterns = {"/*"})
public class CORSFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE, OPTIONS");
        response.setHeader("Access-Control-Allow-Headers", "*, Content-Type, authorization, grupo, usuario");
        filterChain.doFilter(request, response);
    }
}

DTO 代码:

public class TesteDTO {

    private String email;
    private String senha;
    private Long grupo;

    //getters and setters
}

【问题讨论】:

  • 试试@PostMapping(consumes = MediaType.APPLICATION_JSON)
  • 感谢您的回复,但在我将方法上的注释更改为:@PostMapping(consumes = "application/json") 后错误仍然存​​在。编辑问题以添加我的 CORS 类。
  • 请分享TesteDTO的代码。您是否能够看到 Spring 收到的请求(例如通过在过滤器中设置断点)?
  • 另外,据我所知,应该可以将有效负载作为 JavaScript-/TypeScript-Object 传递给axios.post(url[, data[, config]]),因此手动编组似乎没有必要。y
  • Teste dto 只有email、senha 和grupo 的属性。不,它没有到达后端的任何断点,错误发生在方法之前。

标签: java reactjs spring post axios


【解决方案1】:

显然 axios 帖子上的标题需要用 {} 包装。所以,过了太久,这对我来说解决了,把它留给那些在这个问题中遇到类似问题的人。

var headers = {
        'Content-Type': 'application/json',
            'Access-Control-Allow-Origin': '*',
            'Access-Control-Allow-Methods': 'POST',
    };
axios
  .post("http://192.168.0.49:8080/site/login/", testeDTO, {headers})
  .then(response => {
    console.log(response);
  })
  .catch(erro => {
    console.log(erro.response);
  });

【讨论】:

    猜你喜欢
    • 2021-09-24
    • 2022-11-11
    • 1970-01-01
    • 2019-03-29
    • 2017-08-19
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 2020-02-15
    相关资源
    最近更新 更多