• 后端日期类属性date 不接受string类型日期,都是没找到解决的方法,所有前端传回的string字符串都一一转化为java定义的类型


    1、比如日期 我们可以是yyyy-MM-dd 亦可以是 yyyy-MM-dd HH:mm:ss

     方法1在java代码中需要的字段上加上注解 写上日期类型,不过这样很麻烦,每个人写了日期类型的接收前端的参数时都要自己注入,一不小心就有前端来找你接口500了,所以这个方法一有点自私 我不用。

    方法2 一起xml写好到处都可以用

       <mvc:annotation-driven validator="validator">
            <mvc:message-converters>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                    <property name="objectMapper">
                        <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                            <property name="dateFormat">
                                <bean class="java.text.SimpleDateFormat">
                                    <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss"/>
                                </bean>
                            </property>
                        </bean>
                    </property>
                </bean>
    
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                    <property name="objectMapper">
                        <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                            <property name="dateFormat">
                                <bean class="java.text.SimpleDateFormat">
                                    <constructor-arg type="java.lang.String" value="yyyy-MM-dd"/>
                                </bean>
                            </property>
                        </bean>
                    </property>
                </bean>
            </mvc:message-converters>
        </mvc:annotation-driven>

    2、如果是传参很多的情况下,我们需要将参数分组,比如基本参数和业务参数,

    {appVersion,

    device,

    ..

    params

    }

    而这个params中参数是以个json时后端也一样可以解析,我们写一个参数解析类,直接上代码

    package com.xxx.xx.xxx.resolver;
    import com.xxx.xxx.xxx.BaseParam;
    import org.springframework.core.MethodParameter;
    import org.springframework.web.bind.support.WebDataBinderFactory;
    import org.springframework.web.context.request.NativeWebRequest;
    import org.springframework.web.method.support.HandlerMethodArgumentResolver;
    import org.springframework.web.method.support.ModelAndViewContainer;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.util.Map;
    
    public class CustomArgumentResolver implements HandlerMethodArgumentResolver {
    
        @Override
        public boolean supportsParameter(MethodParameter methodParameter) {
            Class paramObjClass = methodParameter.getParameterType();
            if(BaseParam.class.isAssignableFrom(paramObjClass)){
                return true;
            }
            return false;
        }
    
        @Override
        public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
    
            Class paramObjClass = parameter.getParameterType();
    
            Object paramObj = paramObjClass.newInstance();
    
            Map<String, String[]> param = webRequest.getParameterMap();
            for (Map.Entry<String, String[]> entry : param.entrySet()) {
                String[] val = entry.getValue();
                if (val != null && "params".equals(entry.getKey())) {
                    if(val[0].length()<3){//空json处理
                        continue;
                    }
                    Method m1 = paramObjClass.getMethod("setParamsFromJson", String.class);
                    m1.invoke(paramObj, val[0]);
                } else if (val != null && val.length == 1) {
                    Field field =null;
                    if(paramObjClass.getName().equals(BaseParam.class.getName())){
                        //基础类
                        field=paramObjClass.getDeclaredField(entry.getKey());
                    }else {
                        field= paramObjClass.getSuperclass().getDeclaredField(entry.getKey());
                    }
                    if (field.getType().isAssignableFrom(String.class)) {
                        field.set(paramObj, val[0]);
                    } else if (field.getType().isAssignableFrom(Integer.class)) {
                        field.set(paramObj, Integer.valueOf(val[0]));
                    } else if (field.getType().isAssignableFrom(Long.class)) {
                        field.set(paramObj, Long.valueOf(val[0]));
                    } else if (field.getType().isAssignableFrom(Float.class)) {
                        field.set(paramObj, Float.valueOf(val[0]));
                    }
                }
            }
            return paramObj;
        }
    }

    mvc接收参数 ,BaseParam是基础参数定义类

    package com.xxx.xxx.xxx.blacklist;
    
    import com.xxx.common.utils.JSONUtils;
    import com.xxx.xx.xxx.BaseParam;
     
    import java.io.Serializable;
    
    public class UserBlackListRequest extends BaseParam implements Serializable {
    
       //这个类才是前端在params中塞的json对象
        private UserBlackListParam params;
    
        public UserBlackListParam getParams() {
            return params;
        }
    
        public void setParams(UserBlackListParam params) {
            this.params = params;
        }
    
        public void setParamsFromJson(String jsonStr) {
            UserBlackListParam dto = null;
            try {
                dto = JSONUtils.json2pojo(jsonStr, UserBlackListParam.class);
            } catch (Exception e) {
                e.printStackTrace();
            }
            setParams(dto);
        }
    }

    最后再写一个注入拦截器

    <mvc:annotation-driven>
            <mvc:argument-resolvers>
                <bean class="com.xxx.xx.xxx.resolver.CustomArgumentResolver"/> 
    </mvc:argument-resolvers> </mvc:annotation-driven>
  • 相关阅读:
    web自动化搞定文件上传
    App自动化08-Android SDK目录架构详解
    App自动化07-Appium日志分析,深入剖析 Appium 实现原理
    App自动化06-adb常见连接问题整理
    crontab 定时任务
    谷歌对华为断供了,那自动化测试还做吗?
    Fiddler 抓取 https 请求大全
    App自动化05-adb
    App自动化04-Inspector检查器启动QQ测试
    (转载)边缘计算与深度学习综述
  • 原文地址:https://www.cnblogs.com/likun10579/p/10103141.html
Copyright © 2020-2023  润新知