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. unity中虚拟摇杆的实现

    实现效果: 实现: 使用NGUI添加虚拟摇杆背景和其子物体按钮,为按钮Attach  boxcollider和ButtionScript.为按钮添加如下脚本: 注意:其中的静态属性可以在控制物体移动的 ...

  2. sqlalchemy 转json 的几种常用方式

    sqlalchemy 转json 的几种常用方式 # -*- coding:utf-8 -*- import datetime from flask import Flask, json, jsoni ...

  3. 使用flume抓取tomcat的日志文件下沉到kafka消费

    Tomcat生产日志 Flume抓取日志下沉到kafka中 将写好的web项目打包成war包,eclise直接导出export,IDEA 在artifact中添加新的artifact-achieve项 ...

  4. Redis4.0支持的新功能说明

    本文以华为云DCS for Redis版本为例,介绍Redis4.0的新功能.文章转载自华为云帮助中心. 与Redis3.x版本相比,DCS的Redis4.x以上版本,除了开源Redis增加的特性之外 ...

  5. CDH组件目录\主机资源分配\端口

    目录: /var/log/cloudera-scm-installer : 安装日志目录. /var/log/* : 相关日志文件(相关服务的及CM的). /usr/share/cmf/ : 程序安装 ...

  6. POJ 2653 Pick-up sticks(线段判交)

    Description Stan has n sticks of various length. He throws them one at a time on the floor in a rand ...

  7. nodejs笔记--mysql篇(四)

    测试连接 var mysql = require('mysql'); //调用MySQL模块 //创建一个connection var connection = mysql.createConnect ...

  8. Bad Cowtractors(最大生成树)

      Description Bessie has been hired to build a cheap internet network among Farmer John's N (2 <= ...

  9. python中argparse库的使用教程链接

    这两篇文章详细介绍了argparse库的参数设置及使用包括位置参数与可选参数的用法 http://blog.csdn.net/guojuxia/article/details/44462381 htt ...

  10. Pipeline组Beta版本发布说明

    项目名称 Pipeline 项目版本 Beta版本 负责人 北京航空航天大学计算机学院 IloveSE 小组 联系方式 http://www.cnblogs.com/IloveSE 要求发布日期 20 ...