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>

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

  1. Java日期类:Date和Calendar的使用

    总是使用这两个类,总是需要百度.还不如一次全部整理完. 一.介绍: Date 类 Date 表示特定的瞬间,精确到毫秒. 在 JDK 1.1 之前,类 Date 有两个其他的函数.它允许把日期解释为年 ...

  2. java时间日期类(Date、DateFormat、Calendar)学习

    1.Date类 常用方法:long getTime(),用于返回当前时刻的毫秒值 Date d = new Date(2000); System.out.println(d.getTime());// ...

  3. C++实现日期类(Date类)

    #include<iostream>using namespace std;class Date{public:    Date(int year = 1900, int month = ...

  4. Java:日历类、日期类、数学类、运行时类、随机类、系统类

    一:Calendar类 java.util 抽象类Calendar   1.static Calendar getInstance()使用默认时区和语言环境获得一个日历. 2. int get(int ...

  5. Calendar 日期类介绍

    Calendar c = Calendar.getInstance();//创建实例 默认是当前时刻 c.get(Calendar.YEAR); c.get(Calendar.MONTH); c.ge ...

  6. 8.算法竞赛中的常用JAVA API :Calendar日期类

    8.算法竞赛中的常用JAVA API :Calendar日期类 摘要 在蓝桥杯中有关于日期计算的问题,正好java中的Date类和Calendar类提供了对日期处理的一些方法.Date类大部分方法已经 ...

  7. Java的日期类和日期格式化类

    日期类: Date date = new Date(); // 获取当前的系统时间 2 System.out.println("年份:"+ date.getYear()); Cal ...

  8. Mybatis 使用Mybatis时实体类属性名和表中的字段名不一致

    开发中,实体类中的属性名和对应的表中的字段名不一定都是完全相同的,这样可能会导致用实体类接收返回的结果时导致查询到的结果无法映射到实体类的属性中,那么该如何解决这种字段名和实体类属性名不相同的冲突呢? ...

  9. linux学习之路第七天(时间日期类指令详解)

    时间日期类 1.date指令 date指令 - 显示当前日期 基本语法 1)date (功能描述:显示当前时间): 2) date + %Y (功能描述:显示当前年份) 3)date+%m( 功能描述 ...

随机推荐

  1. leetcode-最长上升子序列LIS

    转载原文地址:http://www.cnblogs.com/GodA/p/5180560.html 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7, ...

  2. 【python 3.6】从网站抓图并存放到本地路径

    #!/usr/bin/python # -*- coding: UTF-8 -*- _author_ = 'BH8ANK' import urllib.request import re import ...

  3. 浅谈PCA

    最近在回顾PCA方面的知识,发现对于之前的很多东西有了新的理解,下面和大家分享下我的一些个人的理解 1.我们为什么要用PCA,它能解决我什么问题? PCA(Principal Component An ...

  4. geth账户密码

    xiaocong geth账户密码 123 {d6abe909013d8da914ae2a08c9b58e7b76601b39} 账户密码 123456 0x4A7F15104F54dB3214D2F ...

  5. HDU 4300 Clairewd’s message (next函数的应用)

    题意:给你一个明文对密文的字母表,在给你一段截获信息,截获信息前半段是密文,后半段是明文,但不清楚它们的分界点在哪里,密文一定是完整的,明文可能是残缺的,求完整的信息串(即完整的密文+明文串). 题解 ...

  6. Android开发随笔5

    昨天: 对界面的进一步设计补充 可以在界面之间的跳转 研究了对图标等的操作 今天: 实现对库的相关操作 学习视视频内容‘ 复习java的一些知识.

  7. 用逗号隔开简单数据保存为csv

    用记事本编辑简单数据,用英文逗号隔开,编辑为多列,保存为.csv文件.可以用Excel打开编辑.

  8. javabean的内省技术和BeanUtils的使用

    一.关于javabean javabean是固定写法的java类 书写格式为: 1)必须有无参构造函数 2)属性必须私有, 我们称为字段 3)提供标准的getter和setter 例: name 字段 ...

  9. [C/C++] char data[0](柔性数组)

    转自:http://blog.csdn.net/yby4769250/article/details/7294696 在标准C和C++中0长数组如charArray[0]是不允许使用的,因为这从语义逻 ...

  10. 什么情况下需要检测预装Win8/8.1电脑内置激活密钥(即Win8/8.1 OEM key)?

    1.针对预装在品牌机中的Win8操作系统,因使用了某些软件或自己操作不当导致系统激活Key被替换而激活失效时,你需要找到内置在电脑中的OEM key,重新输入OEM key来激活系统. 2.针对预装W ...