使用spring @RequestBody 接收参数,返回400 。 但是控台不报错误日志

使用spring  @RequestBody 接收参数,返回400 , 大概率是参数问题,比如json参数转对象错误。 

但是控台不打印错误日志 ,没法一眼看出问题。假如我参数很多,就麻烦了。

加断点调试:

InvocableHandlerMethod  文件

private Object[] getMethodArgumentValues(NativeWebRequest request, ModelAndViewContainer mavContainer,
			Object... providedArgs) throws Exception {

		MethodParameter[] parameters = getMethodParameters();
		Object[] args = new Object[parameters.length];
		for (int i = 0; i < parameters.length; i++) {
			MethodParameter parameter = parameters[i];
			parameter.initParameterNameDiscovery(this.parameterNameDiscoverer);
			GenericTypeResolver.resolveParameterType(parameter, getBean().getClass());
			args[i] = resolveProvidedArgument(parameter, providedArgs);
			if (args[i] != null) {
				continue;
			}
			if (this.argumentResolvers.supportsParameter(parameter)) {
				try {
					args[i] = this.argumentResolvers.resolveArgument(
							parameter, mavContainer, request, this.dataBinderFactory);
					continue;
				}
				catch (Exception ex) {
					if (logger.isTraceEnabled()) {
						logger.trace(getArgumentResolutionErrorMessage("Error resolving argument", i), ex);
					}
					throw ex;
				}
			}

  调试发现代码进入红色部分 , 但是日志级别为trace , 所以没有打印。

解决方法: 

1. 配置全局错误处理  , 即GloabalException 具体自行百度。

2. 调试看其中处理json转换为对象的 类为 

MappingJacksonHttpMessageConverter , 方法就是
private Object readJavaType(JavaType javaType, HttpInputMessage inputMessage) {
        try {
            return this.objectMapper.readValue(inputMessage.getBody(), javaType);
        } catch (IOException var4) {
            throw new HttpMessageNotReadableException("Could not read JSON: " + var4.getMessage(), var4);
        }
    }

  设置对象参数为未找到忽略即可: 在类上加注解  

@JsonIgnoreProperties(ignoreUnknown = true),然后把所有参数都传值,看看哪个参数值为空,即可找到写到的参数。 

3. 改响应的日志级别,红色部分的 logger 为其父类HandlerMethod , 我项目用的log4j, 配置该类日志级别为trace就可以看到错误日志了
log4j.logger.org.springframework.web.method.HandlerMethod=TRACE
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "p3" (class classA),
not marked as ignorable (6 known properties: "p1", "p2", "p3", "p4", "p5", "p6"])

  

原文地址:https://www.cnblogs.com/zhangchenglzhao/p/14446481.html