接收Date类型数据
当客户端发起这样的请求时,服务端如何接收其中的日期参数settleDate呢:
http://localhost:8080/calculate/1?settleDate=2016-10-30
以前我们基本上是用一个字符串来接收这个参数,然后在代码中手动将其转换为Date类型。如:
1
2
3
4
5
6
7
8
9
|
public
void
test(
@PathViriable
lendId,
@RequestParam
String settleDate){
Date actualSettleDate;
if
(settleDate ==
null
){
actualSettleDate =
new
Date();
}
else
{
actualSettleDate = DateUtils.parseDate(settleDate,
"yyyy-MM-dd"
);
}
......
}
|
然而SpringMVC提供了一个更简便的方法:
1
2
3
4
5
6
7
|
public
void
test(
@PathViriable
lendId,
@RequestParam
(required =
false
)
@DateTimeFormat
(iso = DateTimeFormat.ISO.DATE) Date settleDate){
if
(settleDate ==
null
){
settleDate =
new
Date();
}
......
}
|
其中的iso属性预定义了yyyy-MM-dd、HH:mm:ss.SSSZ、yyyy-MM-dd'T'HH:mm:ss.SSSZ这三种格式。如果需要别的格式,可以用其中的pattern属性来自定义。
不过,如果要通过SpringMVC的注解来给日期参数设定默认值(比如设值为当前日期),需要自己进行扩展。
用一个复杂对象接收多个参数
当客户端发起这样的请求时,服务端如何接收其中的全部参数呢:
http://localhost:8080/calculate/product/97?currentPhase=1&overdueDays=1,16&channelType=UCREDIT&fundSource=RENRENDAI&monthlyRepay=1000&originPrincipal=900000
常用的做法,是在Controller的对应方法上,把所有参数一一列出来:
1
2
3
|
public
void
calcluate(
@PathViriable
productId,
@RequestParam
int
currentPhase,
@RequestParam
Integer[] overdueDays,
@RequestParam
ChannelType channelType,
@RequestParam
FundSource fundSource,
@RequestParam
BigDecimal monthlyRepay,
@RequestParam
BigDecimal originPrincipal){
......
}
|
或者用一个Map<String, String>,来接收全部参数,然后手动将其转化为对应的格式:
1
2
3
|
public
void
calcluate(
@PathViriable
productId,
@RequestParam
(required =
false
) Map<String, String> param){
......
}
|
其实还有第三种方式,即定义一个数据封装类,用这个类来接收参数:
1
2
3
|
public
void
calcluate(
@PathViriable
productId, RestParam param){
......
}
|
其中的数据封装类如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public
class
RestParam
extends
NonIDBaseModel {
/**
*
*/
private
static
final
long
serialVersionUID = 3550863010097047054L;
private
int
currentPhase;
private
List<Integer> overdueDays =
new
ArrayList<>();
private
ChannelType channelType;
private
FundSource fundSource;
private
BigDecimal monthlyRepay;
private
BigDecimal originPrincipal;
// getters/setters
}
|
需要注意的是,controller的方法上,对 RestParam param不要再加@RequestParam注解。
本文转自 斯然在天边 51CTO博客,原文链接:http://blog.51cto.com/winters1224/1879714,如需转载请自行联系原作者