1.Json传参方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
package com.example.config; import java.text.FieldPosition; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Date; import com.fasterxml.jackson.databind.util.StdDateFormat; import org.apache.commons.lang3.StringUtils; /** * JSON形式的全局时间类型转换器 */ public class CustomDateFormat extends StdDateFormat { private static final long serialVersionUID = -3201781773655300201L; public static final CustomDateFormat instance = new CustomDateFormat(); @Override /** * 只要覆盖parse(String)这个方法即可 */ public Date parse(String dateStr, ParsePosition pos) { return getDate(dateStr, pos); } @Override public Date parse(String dateStr) { ParsePosition pos = new ParsePosition(0); return getDate(dateStr, pos); } private Date getDate(String dateStr, ParsePosition pos) { SimpleDateFormat sdf = null ; if (StringUtils.isBlank(dateStr)) { return null ; } else if (dateStr.matches( "^\\d{4}-\\d{1,2}$" )) { sdf = new SimpleDateFormat( "yyyy-MM" ); return sdf.parse(dateStr, pos); } else if (dateStr.matches( "^\\d{4}-\\d{1,2}-\\d{1,2}$" )) { sdf = new SimpleDateFormat( "yyyy-MM-dd" ); return sdf.parse(dateStr, pos); } else if (dateStr.matches( "^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$" )) { sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm" ); return sdf.parse(dateStr, pos); } else if (dateStr.matches( "^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$" )) { sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); return sdf.parse(dateStr, pos); } else if (dateStr.length() == 23) { sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.SSS" ); return sdf.parse(dateStr, pos); } return super.parse(dateStr, pos); } @Override public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition){ SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); return sdf.format(date, toAppendTo, fieldPosition); } @Override public CustomDateFormat clone() { return new CustomDateFormat(); } } |
2.表单传参方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
package com.example.config; import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 表单形式的全局时间类型转换器 */ @Component public class DateConverter implements Converter<String, Date> { private static final List<String> formarts = new ArrayList<>(4); static { formarts.add( "yyyy-MM" ); formarts.add( "yyyy-MM-dd" ); formarts.add( "yyyy-MM-dd HH:mm" ); formarts.add( "yyyy-MM-dd HH:mm:ss" ); } @Override public Date convert(String source) { String value = source.trim(); if ( "" . equals (value)) { return null ; } if (source.matches( "^\\d{4}-\\d{1,2}$" )) { return parseDate(source, formarts. get (0)); } else if (source.matches( "^\\d{4}-\\d{1,2}-\\d{1,2}$" )) { return parseDate(source, formarts. get (1)); } else if (source.matches( "^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$" )) { return parseDate(source, formarts. get (2)); } else if (source.matches( "^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$" )) { return parseDate(source, formarts. get (3)); } else { throw new IllegalArgumentException( "Invalid boolean value '" + source + "'" ); } } /** * 格式化日期 * * @param dateStr String 字符型日期 * @param format String 格式 * @return Date 日期 */ private Date parseDate(String dateStr, String format) { Date date = null ; try { DateFormat dateFormat = new SimpleDateFormat(format); date = dateFormat.parse(dateStr); } catch (Exception e) { e.printStackTrace(); } return date; } } |
3.配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
package com.example.config; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.ConversionServiceFactoryBean; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.converter.Converter; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.util.AntPathMatcher; import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @Configuration public class WebMvcConfig implements WebMvcConfigurer { /** * 重写url路径匹配(忽略大小写敏感) */ @Override public void configurePathMatch(PathMatchConfigurer configurer) { AntPathMatcher antPathMatcher = new AntPathMatcher(); antPathMatcher.setCaseSensitive( false ); } /** * JSON全局日期转换器 */ @Bean public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() { MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); //设置日期格式 ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setDateFormat(CustomDateFormat.instance); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper); //设置中文编码格式 List<MediaType> list = new ArrayList<MediaType>(); list.add(MediaType.APPLICATION_JSON_UTF8); mappingJackson2HttpMessageConverter.setSupportedMediaTypes(list); return mappingJackson2HttpMessageConverter; } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters){ converters.add(getMappingJackson2HttpMessageConverter()); } /** * 表单全局日期转换器 */ @Bean @Autowired public ConversionService getConversionService(DateConverter dateConverter){ ConversionServiceFactoryBean factoryBean = new ConversionServiceFactoryBean(); Set<Converter> converters = new HashSet<>(); converters.add(dateConverter); factoryBean.setConverters(converters); return factoryBean.getObject(); } } |
从此不再纠结用@DateTimeFormat(patten = "yyyyy-MM-dd")还是@DateTimeForm