Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
yangxiujun
/
paidan_demo
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit d1a70903
authored
Sep 21, 2023
by
刘鑫
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: 日期参数转换器,兼容JSON方式和GET请求及POST表单方式
1 parent
1c3cb333
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
161 additions
and
0 deletions
project-order/src/main/java/com/dituhui/pea/order/config/ParamConverterConfig.java
project-order/src/main/java/com/dituhui/pea/order/config/ParamConverterConfig.java
0 → 100644
View file @
d1a7090
package
com
.
dituhui
.
pea
.
order
.
config
;
import
com.fasterxml.jackson.databind.ser.std.ToStringSerializer
;
import
com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer
;
import
com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer
;
import
com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer
;
import
com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer
;
import
com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer
;
import
com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.core.convert.converter.Converter
;
import
java.text.DateFormat
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.time.LocalTime
;
import
java.time.format.DateTimeFormatter
;
import
java.util.Date
;
/**
* 日期参数转换器 兼容JSON方式和GET请求及POST表单方式
*/
@Configuration
public
class
ParamConverterConfig
{
/**
* 日期正则表达式
*/
private
static
final
String
DATE_REGEX
=
"[1-9]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])"
;
/**
* 时间正则表达式
*/
private
static
final
String
TIME_REGEX
=
"(20|21|22|23|[0-1]\\d):[0-5]\\d:[0-5]\\d"
;
/**
* 日期和时间正则表达式
*/
private
static
final
String
DATE_TIME_REGEX
=
DATE_REGEX
+
"\\s"
+
TIME_REGEX
;
/**
* 13位时间戳正则表达式
*/
private
static
final
String
TIME_STAMP_REGEX
=
"1\\d{12}"
;
/**
* 年和月正则表达式
*/
private
static
final
String
YEAR_MONTH_REGEX
=
"[1-9]\\d{3}-(0[1-9]|1[0-2])"
;
/**
* 年和月格式
*/
private
static
final
String
YEAR_MONTH_PATTERN
=
"yyyy-MM"
;
/**
* DateTime格式化字符串
*/
private
static
final
String
DEFAULT_DATETIME_PATTERN
=
"yyyy-MM-dd HH:mm:ss"
;
/**
* Date格式化字符串
*/
private
static
final
String
DEFAULT_DATE_FORMAT
=
"yyyy-MM-dd"
;
/**
* Time格式化字符串
*/
private
static
final
String
DEFAULT_TIME_FORMAT
=
"HH:mm:ss"
;
/**
* LocalDate转换器,用于转换RequestParam和PathVariable参数
*/
@Bean
public
Converter
<
String
,
LocalDate
>
localDateConverter
()
{
return
source
->
{
if
(
StringUtils
.
isEmpty
(
source
))
{
return
null
;
}
return
LocalDate
.
parse
(
source
,
DateTimeFormatter
.
ofPattern
(
DEFAULT_DATE_FORMAT
));
};
}
/**
* LocalDateTime转换器,用于转换RequestParam和PathVariable参数
*/
@Bean
public
Converter
<
String
,
LocalDateTime
>
localDateTimeConverter
()
{
return
source
->
{
if
(
StringUtils
.
isEmpty
(
source
))
{
return
null
;
}
return
LocalDateTime
.
parse
(
source
,
DateTimeFormatter
.
ofPattern
(
DEFAULT_DATETIME_PATTERN
));
};
}
/**
* LocalDate转换器,用于转换RequestParam和PathVariable参数
*/
@Bean
public
Converter
<
String
,
LocalTime
>
localTimeConverter
()
{
return
source
->
{
if
(
StringUtils
.
isEmpty
(
source
))
{
return
null
;
}
return
LocalTime
.
parse
(
source
,
DateTimeFormatter
.
ofPattern
(
DEFAULT_TIME_FORMAT
));
};
}
/**
* Date转换器,用于转换RequestParam和PathVariable参数
*/
@Bean
public
Converter
<
String
,
Date
>
dateConverter
()
{
return
new
Converter
<
String
,
Date
>()
{
@SuppressWarnings
(
"NullableProblems"
)
@Override
public
Date
convert
(
String
source
)
{
if
(
StringUtils
.
isEmpty
(
source
))
{
return
null
;
}
if
(
source
.
matches
(
TIME_STAMP_REGEX
))
{
return
new
Date
(
Long
.
parseLong
(
source
));
}
DateFormat
format
;
if
(
source
.
matches
(
DATE_TIME_REGEX
))
{
format
=
new
SimpleDateFormat
(
DEFAULT_DATETIME_PATTERN
);
}
else
if
(
source
.
matches
(
DATE_REGEX
))
{
format
=
new
SimpleDateFormat
(
DEFAULT_DATE_FORMAT
);
}
else
if
(
source
.
matches
(
YEAR_MONTH_REGEX
))
{
format
=
new
SimpleDateFormat
(
YEAR_MONTH_PATTERN
);
}
else
{
throw
new
IllegalArgumentException
();
}
try
{
return
format
.
parse
(
source
);
}
catch
(
ParseException
e
)
{
throw
new
RuntimeException
(
e
);
}
}
};
}
/**
* Json序列化和反序列化转换器,用于转换Post请求体中的json以及将我们的对象序列化为返回响应的json
*/
@Bean
public
Jackson2ObjectMapperBuilderCustomizer
jackson2ObjectMapperBuilderCustomizer
()
{
return
builder
->
builder
.
serializerByType
(
LocalDateTime
.
class
,
new
LocalDateTimeSerializer
(
DateTimeFormatter
.
ofPattern
(
DEFAULT_DATETIME_PATTERN
)))
.
serializerByType
(
LocalDate
.
class
,
new
LocalDateSerializer
(
DateTimeFormatter
.
ofPattern
(
DEFAULT_DATE_FORMAT
)))
.
serializerByType
(
LocalTime
.
class
,
new
LocalTimeSerializer
(
DateTimeFormatter
.
ofPattern
(
DEFAULT_TIME_FORMAT
)))
.
serializerByType
(
Long
.
class
,
ToStringSerializer
.
instance
)
.
deserializerByType
(
LocalDateTime
.
class
,
new
LocalDateTimeDeserializer
(
DateTimeFormatter
.
ofPattern
(
DEFAULT_DATETIME_PATTERN
)))
.
deserializerByType
(
LocalDate
.
class
,
new
LocalDateDeserializer
(
DateTimeFormatter
.
ofPattern
(
DEFAULT_DATE_FORMAT
)))
.
deserializerByType
(
LocalTime
.
class
,
new
LocalTimeDeserializer
(
DateTimeFormatter
.
ofPattern
(
DEFAULT_TIME_FORMAT
)));
}
}
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment