zoukankan      html  css  js  c++  java
  • 使用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"])

      

  • 相关阅读:
    WSS 扩展文件夹的属性如何给文件夹添加扩展字段
    SharePoint 打开文档附件不弹出提示框
    SharePoint2010 安装时报“未能启动数据库服务 MSSQL$Sharepoint"解决办法
    常见问题
    sharepoint 关于pdf格式在线打开
    ASP.NET 2.0 连接Sql Server 2005报错 [DBNETLIB][ConnectionOpen (Invalid Instance()).]无效的连线。
    <转>SQL Server 2008 R2十大新特性解析
    windows查看端口占用情况
    SQL Server适用脚本收集一
    信息系统中用户的域AD认证功能
  • 原文地址:https://www.cnblogs.com/zhangchenglzhao/p/14446481.html
Copyright © 2011-2022 走看看