springmvc总结(配置传递参数去除前后空格、参数绑定时处理
⽇期)
1.属性为Integer时,前台表单不填,默认为null;属性为String,前台表单不填,默认为"";
2.属性为Integer时,前台表单填空格,model封装为null;属性为String,前台表单填空格,model封装为" ";
3.属性为Integer,后台model封装时【去除】前后空格;属性为String,后台model封装时【不去除】前后空格;
4.属性为Integer,表单填⾮数字,报错http400(Bad Request)
⽬录:
⼀、
⼆、
三、
四、
五、
⼀、springmvc配置传递参数去除前后空格
来⾃:
1. 创建⾃定义转换器类
package st;
import verter.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 = im();
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="version.CustomConverter"></bean>
</list>
</property>
</bean>
⼆、使⽤filter拦截参数去掉两端的空格(资料+亲测解决)
三、springmvc+jackson处理date
参考资料:
MappingJacksonHttpMessageConverter主要通过ObjectMapper来实现返回json字符串。这⾥我们继承该类,注册⼀个JsonSerializer<T>。然后在配置⽂件中注⼊⾃定义的ObjectMapper。
1.编写⼦类继承ObjectMapper
package com.verter;
dehaus.jackson.JsonGenerator;
dehaus.jackson.JsonProcessingException;
dehaus.jackson.map.JsonSerializer;
dehaus.jackson.map.ObjectMapper;
dehaus.jackson.map.SerializerProvider;
dehaus.jackson.map.ser.CustomSerializerFactory;
import java.io.IOException;
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));
}mvc的controller
});
this.setSerializerFactory(factory);
}
}
2.配置spring⽂件
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.verter.json.MappingJacksonHttpMessageConverter">
<property name="objectMapper" ref="customObjectMapper"></property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<bean id="customObjectMapper" class="com.verter.CustomJsonDateConverter"></bean>
3.使⽤内置的⽇期格式化⼯具
同样是全局设置json响应的⽇期格式,但此⽅法可以和@JsonFormat共存,也就是说可以全局设置⼀个格式,特定的需求可以使⽤注解设置。
* 配置spring⽂件:配置全局json的⽇期转换格式
<mvc:annotation-driven>
<!-- 处理responseBody ⾥⾯⽇期类型 -->
<mvc:message-converters>
<bean class="org.verter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="dateFormat">
<bean class="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错误
blog.csdn/wangxueqing52/article/details/80536028?utm_source=blogxgwz0
解决⽅法⼀:
我们使⽤@DateTimeFormat(pattern="yyyy-MM-dd") ⾸先需要引⼊⼀个jar 包,否者是不能的:joda-time-2.1.jar
然后在l中进⾏配置。⾸先需要在头上⾯加上:
xmlns:mvc="/schema/mvc"
/schema/mvc
/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
原⽂:blog.csdn/qq_34160679/article/details/76401576
版权声明:本⽂为博主原创⽂章,转载请附上博⽂链接!
⽅法⼆:Controller类中
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
⽅法三:实现⼀个全局⽇期类型转换器并进⾏配置
spring3.1以前的配置
blog.csdn/wangxueqing52/article/details/80536028?utm_source=blogxgwz0、
spring3.1以后的配置
blog.csdn/chenleixing/article/details/45156617
blog.csdn/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】
/**
* 增加字符串转⽇期的功能
* blog.csdn/fansili/article/details/78366874
*/
@PostConstruct
public void initEditableAvlidation() {
ConfigurableWebBindingInitializer initializer = (WebBindingInitializer();
ConversionService() != null) {
GenericConversionService genericConversionService = (ConversionService();
// 注册⾃定义的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"}
---
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论