SpringMVC接收日期类型参数的自定义转换

xiaoxiao2021-02-28  27

一般类型的参数,都会自动实现转换,比如下面的 private Long id; private String userName; private BigDecimal userSalary; 但是时间类型没有对应转换规则的话,服务器就会报错。

public class User { private Long id; private String userName; private BigDecimal userSalary; private Date createTime; // getter、setter } 1234567

实现spring提供的Converter接口,自定义类型转换的处理。

Converter

import org.springframework.core.convert.converter.Converter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * Created by susq on 2017-7-10. */ public class DateConvert implements Converter<String, Date> { @Override public Date convert(String stringDate) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); Date d = null; try { d = simpleDateFormat.parse(stringDate); } catch (ParseException e) { e.printStackTrace(); } return d; } } 123456789101112131415161718192021

在spring配置文件中注册自定义的转换bean

<bean id="dateConvert" class="com.susq.springbegin.utils.DateConvert"/> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <set> <ref bean="dateConvert"/> </set> </property> </bean> <mvc:annotation-driven conversion-service="conversionService"/> 123456789

Controller中如下。

@RequestMapping(value = "/api/users/testParam") public void testparam(User vo) { System.out.println(vo.getId()); System.out.println(vo.getUserName()); System.out.println(vo.getCreateTime()); System.out.println(vo.getUserSalary()); } 1234567

请求http://localhost:8080/api/users/testParam?userName=susq&Id=1&userPwd=123456&createTime=20170710&isDelete=1&userSalary=10000.123145 。输出

1 susq 123456 Mon Jul 10 00:00:00 CST 2017 1 10000.123145 123456

也可以实现Formatter, Formatter是一类特殊的Converter,专门处理字符串的转换

类似于Converter, 修改实现和配置文件即可

public class DateConvert implements Formatter<Date> { @Override public Date parse(String s, Locale locale) throws ParseException { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); Date d = null; try { d = simpleDateFormat.parse(s); } catch (ParseException e) { e.printStackTrace(); } return d; } @Override public String print(Date date, Locale locale) { return null; } } 12345678910111213141516171819 <bean id="dateConvert" class="com.susq.springbegin.utils.DateConvert"/> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="formatters"> <set> <ref bean="dateConvert"/> </set> </property> </bean> <mvc:annotation-driven conversion-service="conversionService"/>
转载请注明原文地址: https://www.6miu.com/read-600167.html

最新回复(0)