后端日期类属性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>
原文地址:https://www.cnblogs.com/likun10579/p/10103141.html