java.lang.IllegalStateException: Could not resolve parameter [0] in *.*.*:No suitable resolver

异常解析报错:java.lang.IllegalStateException: Could not resolve parameter [0] in public com.xx.xx com.xx.xx.handler.GlobalExceptionHandler.error(com.fasterxml.jackson.core.JsonParseException): No suitable resolver:

在项目中编写一个异常处理类,进行测试时,进入异常处理方法时却报错,报错如下:
在这里插入图片描述
下面贴出该异常处理类:

import com.fasterxml.jackson.core.JsonParseException;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.jdbc.BadSqlGrammarException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;


/**
 * 统一异常处理类
 */
@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public R error(Exception e){
        e.printStackTrace();
        System.err.println("发生异常");
        return R.error();
    }

    @ExceptionHandler(BadSqlGrammarException.class)
    @ResponseBody
    public R error(BadSqlGrammarException e){
        //e.printStackTrace();
        System.err.println("sql语法错误");
        return R.setResult(ResultCodeEnum.BAD_SQL_GRAMMAR);
    }

    @ExceptionHandler(HttpMessageNotReadableException.class)
    @ResponseBody   
    public R error(JsonParseException e){
        //e.printStackTrace();
        System.err.println("json解析异常");
        return R.setResult(ResultCodeEnum.JSON_PARSE_ERROR);
    }

//    @ExceptionHandler(HttpMessageNotReadableException.class)
//    @ResponseBody
//    public R error(IllegalStateException e){
//        //e.printStackTrace();
//        System.err.println("未知异常");
//        return R.setResult(ResultCodeEnum.JSON_PARSE_ERROR);
//    }
}
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;

@Data
@ApiModel(value = "全局统一返回结果")
public class R {
    @ApiModelProperty(value = "是否成功")
    private Boolean success;
    @ApiModelProperty(value = "返回码")
    private Integer code;
    @ApiModelProperty(value = "返回消息")
    private String message;
    @ApiModelProperty(value = "返回数据")
    private Map<String, Object> data = new HashMap<String, Object>();
    private R(){}
    public static R  ok(){
        R r = new R();
        r.setSuccess(ResultCodeEnum.SUCCESS.getSuccess());
        r.setCode(ResultCodeEnum.SUCCESS.getCode());
        r.setMessage(ResultCodeEnum.SUCCESS.getMessage());
        return r;
    }
    public static R error(){
        R r = new R();
        r.setSuccess(ResultCodeEnum.UNKNOWN_REASON.getSuccess());
        r.setCode(ResultCodeEnum.UNKNOWN_REASON.getCode());
        r.setMessage(ResultCodeEnum.UNKNOWN_REASON.getMessage());
        return r;
    }
    public static R setResult(ResultCodeEnum resultCodeEnum){
        R r = new R();
        r.setSuccess(resultCodeEnum.getSuccess());
        r.setCode(resultCodeEnum.getCode());
        r.setMessage(resultCodeEnum.getMessage());
        return r;
    }
    public R success(Boolean success){
        this.setSuccess(success);
        return this;
    }
    public R message(String message){
        this.setMessage(message);
        return this;
    }
    public R code(Integer code){
        this.setCode(code);
        return this;
    }
    public R data(String key, Object value){
        this.data.put(key, value);
        return this;
    }
    public R data(Map<String, Object> map){
        this.setData(map);
        return this;
    }
}

其中resultCodeEnum为自定义的异常枚举;
首先我在前端(swagger测试)故意输入了错误的json数据类型(gmtCreate为日期类型,故意输入String类型):
在这里插入图片描述
如果解析报错如上图。
注释掉该异常解析方法,再次运行,由于该异常解析方法没有了,会进入异常解析的父类,即:

@ExceptionHandler(Exception.class)
    @ResponseBody
    public R error(Exception e){
        e.printStackTrace();
        System.err.println("发生异常");
        return R.error();
    }

由此可以发现,可能是异常解析器不能解析异常而导致的报错,而HttpMessageNotReadableException类又获取到了json错误的异常,说明异常解析类并未有问题,而HttpMessageNotReadableException类却无法解析JsonParseException类,说明JsonParseException类不能被HttpMessageNotReadableException类解析,或者说,JsonParseException类并未实现HttpMessageNotReadableException类,所以,解决方案:
1、将JsonParseException类换成HttpMessageNotReadableException类。
2、找到HttpMessageNotReadableException类下实现的json错误解析异常类替换JsonParseException类

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值