1.属性为Integer时,前台表单不填,默认为null;属性为String,前台表单不填,默认为"";
2.属性为Integer时,前台表单填空格,model封装为null;属性为String,前台表单填空格,model封装为" ";
3.属性为Integer,后台model封装时【去除】前后空格;属性为String,后台model封装时【不去除】前后空格;
4.属性为Integer,表单填非数字,报错http400(Bad Request)
一、springmvc配置传递参数去除前后空格
二、使用filter拦截参数去掉两端的空格(资料+亲测解决)
三、springmvc+jackson处理date
四、前端日期字符串转换为java.util.date的三种方法
五、日期转换的处理(全局和局部)
一、springmvc配置传递参数去除前后空格 <--返回目录
来自:https://blog.csdn.net/Archer_M/article/details/79884228
1. 创建自定义转换器类
package com.java1234.test; import org.springframework.core.convert.converter.Converter; /** * 自定义转换器 去掉前后空格 <S, T> : S 页面上类型 T : 转换后的类型 */ public class CustomConverter implements Converter<String, String> { // 去掉前后空格 @Override public String convert(String source) { // TODO Auto-generated method stub try { if (null != source) { source = source.trim(); if (!"".equals(source)) { return source; } } } catch (Exception e) { // TODO: handle exception } return null; } } } return null; } }
2. 在springmvc文件中进行配置
<!-- 处理器 映射器 适配器 --> <mvc:annotation-driven conversion-service="conversionService"/> <!-- Converter转换器工厂 注: 需要在 适配器 中进行配置 --> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <!-- 日期 --> <!-- 去掉前后空格 --> <property name="converters"> <list> <bean class="cn.jay.common.conversion.CustomConverter"></bean> </list> </property> </bean>
二、使用filter拦截参数去掉两端的空格(资料+亲测解决) <--返回目录
https://blog.csdn.net/xiaoyu19910321/article/details/52838828
三、springmvc+jackson处理date <--返回目录
参考资料:https://www.cnblogs.com/woshimrf/p/5189435.html
MappingJacksonHttpMessageConverter主要通过ObjectMapper来实现返回json字符串。这里我们继承该类,
注册一个JsonSerializer<T>。然后在配置文件中注入自定义的ObjectMapper。
1.编写子类继承ObjectMapper
package com.demo.common.util.converter; import org.codehaus.jackson.JsonGenerator; import org.codehaus.jackson.JsonProcessingException; import org.codehaus.jackson.map.JsonSerializer; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.SerializerProvider; import org.codehaus.jackson.map.ser.CustomSerializerFactory; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; /** * 解决Date类型返回json格式为自定义格式 */ public class CustomJsonDateConverter extends ObjectMapper { public CustomJsonDateConverter(){ CustomSerializerFactory factory = new CustomSerializerFactory(); factory.addGenericMapping(Date.class, new JsonSerializer<Date>(){ @Override public void serialize(Date value,JsonGenerator jsonGenerator,SerializerProvider provider)throws IOException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); jsonGenerator.writeString(sdf.format(value)); } }); this.setSerializerFactory(factory); } }
2.配置spring文件
<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="objectMapper" ref="customObjectMapper"></property> </bean> </mvc:message-converters> </mvc:annotation-driven> <bean id="customObjectMapper" class="com.demo.common.util.converter.CustomJsonDateConverter"></bean>
3.使用内置的日期格式化工具
同样是全局设置json响应的日期格式,但此方法可以和@JsonFormat共存,也就是说可以全局设置一个格式,
特定的需求可以使用注解设置。
* 配置spring文件:配置全局json的日期转换格式
<mvc:annotation-driven> <!-- 处理responseBody 里面日期类型 --> <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> </mvc:message-converters> </mvc:annotation-driven>
* 配置特定的date
@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8") public Date getBirth() { return birth; }
四、前端日期字符串转换为java.util.date的三种方法 <--返回目录
解决SpringMVC Controller中接受日期格式发生400错误
https://blog.csdn.net/wangxueqing52/article/details/80536028?utm_source=blogxgwz0
解决方法一:
我们使用@DateTimeFormat(pattern="yyyy-MM-dd") 首先需要引入一个jar 包,否者是不能的:joda-time-2.1.jar
然后在spring.xml中进行配置。首先需要在头上面加上:
xmlns:mvc="http://www.springframework.org/schema/mvc"
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
(当然版本不同spring-mvc-3.0.xsd 写法也不同)。
头加上之后,然后需要配置进行声明:<mvc:annotation-driven></mvc:annotation-driven>
最后在你所需要的Date数据类型之上加上@DateTimeFormat(pattern="yyyy-MM-dd")即可
---------------------
作者:默默的菜鸟--
来源:CSDN
原文:https://blog.csdn.net/qq_34160679/article/details/76401576
版权声明:本文为博主原创文章,转载请附上博文链接!
方法二:Controller类中
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); //true:允许输入空值,false:不能为空值
}
方法三:实现一个全局日期类型转换器并进行配置
spring3.1以前的配置
https://blog.csdn.net/wangxueqing52/article/details/80536028?utm_source=blogxgwz0、
spring3.1以后的配置
https://blog.csdn.net/chenleixing/article/details/45156617
https://blog.csdn.net/chenleixing/article/details/45190371
五、日期转换的处理(全局和局部) <--返回目录
1.配置全局的json消息处理
// 自定义消息转换器MappingJacson2HttpMessageConverter @Bean public ObjectMapper objectMapper() { ObjectMapper mapper = new ObjectMapper(); SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); mapper.setDateFormat(fmt); return mapper; }
测试1:
@ResponseBody转换json时,效果:
{"id":1,"name":"张三1","age":11,"date":"2019-01-13 22:20:47"}
测试2:
前台表单格式:2019-01-13 22:20:47。
前台传递json数据,@RequestBody绑定数据,成功。
测试3:
前台表单格式:2019-01-13。
前台传递json数据,@RequestBody绑定数据,失败。
测试4:
前台表单提交格式:2019-01-13 22:20:47,失败。
因为传递的表单数据,所以需要配置StringToDateConverter。
2.自定义及配置全局的日期转换器【StringToDateConverter】
/** * 增加字符串转日期的功能 * https://blog.csdn.net/fansili/article/details/78366874 */ @PostConstruct public void initEditableAvlidation() { ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer)handlerAdapter.getWebBindingInitializer(); if(initializer.getConversionService() != null) { GenericConversionService genericConversionService = (GenericConversionService)initializer.getConversionService(); // 注册自定义的StringtoDate的转换器 genericConversionService.addConverter(new StringToDateConverter()); } }
测试5:
前台表单提交格式:2019-01-13 22:20:47,成功。
前台表单提交格式:2019-01-13,也成功。
因为:转换器中对传递的字符串进行了判断
if (source.length() == 10) {
sdf = new SimpleDateFormat("yyyy-MM-dd");
} else if (source.length() == 16) {
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
} else if (source.length() == 19) {
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
} else if (source.length() == 23) {
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
}
3.要想自定义json转换时日期的格式,怎么办?
局部配置:在实体类字段上或getter方法上
@JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")
private Date date;
测试6:
前台表单格式:2019-01-13或2019-01-13 aa:bb:cc.abc
前台传递json数据,@RequestBody绑定数据,成功。
并且,后台@ResponseBody转换json时,效果:
{"id":1,"name":"张三1","age":11,"date":"2019-01-13"}
---