相关推荐recommended
SpringBoot之Post请求@RequestBody为空抛出Required request body is missing异常的解决方案
作者:mmseoamin日期:2023-12-14

org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing

出现异常的原因:body为空,但是@RequestBody注解默认请求体不能为空。

解决办法

一:查看是不是@GetMapping,Spring Get请求不能使用@RequestBody

这个纯属粗心大意的问题~

二:要求请求用Post却用了Get请求

三:@RequestBody(required = false)

如果是刚刚开发的项目,那么建议这样写。如果已经存在的项目,肯定不能这样写,后面会介绍另外一种相对简单的写法,但是如果Spring版本升级有可能会出现问题。

    @PostMapping("postUrl")
    public void postUrl(@RequestBody(required = false) Object object){
        if (object == null){
            throw new RuntimeException("post请求体body不能为空!");
        }
    }

四:全局异常捕获

如果Spring 版本升级有可能会改变该信息,因此升级版本后如果字符串信息改变也要做出相应的改变,不过这种概率比较低!可以放心使用。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
/**
 * 全局返回和异常处理类
 */
@RestControllerAdvice
public class GlobalExceptionHandler {
    private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
    /**
     * 服务器异常
     */
    @ExceptionHandler(value =Exception.class)
    public Object exception(Exception e){
        String msg = e.getMessage();
        if (StringUtils.hasText(msg)){
        	//捕获这个异常信息,如果这个异常信息包含这个字符串就抛出自定义异常。
            if (msg.contains("Required request body is missing:")){
                throw new RuntimeException("post请求体body不能为空!");
            }
        }
        log.error("Exception异常:",e);
        return msg;
    }
}