一般类型的参数,都会自动实现转换,比如下面的 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 }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; } }在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"/>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()); }请求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类似于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; } } <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"/>通过第三方jar包提供好的转换功能,比如使用jackson. 代码中在对应的类的Date类型的属性上加上JsonFormat注解,接口接收或者返回时间类型的时候都会进行自动转换。但是要注意,不指定时区的时候,会和北京时间差8个小时。如果要用北京时间,增加一个属性,timezone=”GMT+8” ,因为我们是东八区(北京时间)
package cn.com.servyou.hs.fp.jxgl.model; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Getter; import lombok.Setter; import lombok.ToString; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; @Getter @Setter @ToString public class InInvoiceAcquireStatus implements Serializable { private Long total; private BigDecimal price; /** * 上次获取时间 */ @JsonFormat(timezone="GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") private Date acquireTime; }