SpringBoot之Post请求@RequestBody为空抛出Required request body is missing异常的解决方案

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;
    }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值