SpringMVC两种接收GET参数的方法

简介:
+关注继续查看

接收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,如需转载请自行联系原作者

相关文章
|
22天前
|
JavaScript
springMVC接收数组参数
springMVC接收数组参数
|
23天前
|
Java 容器
SpringMVC中参数是如何绑定and返回结果是如何解析的?
SpringMVC中参数是如何绑定and返回结果是如何解析的?
21 0
|
23天前
|
XML JSON Java
SpringMVC获取请求中的参数值不同方式总结
SpringMVC获取请求中的参数值不同方式总结
15 0
|
2月前
|
JSON 前端开发 Java
【SpringMVC】参数传递与用户请求和响应(下)
【SpringMVC】参数传递与用户请求和响应(下)
21 0
|
2月前
|
Java 测试技术 API
【SpringMVC】参数传递与用户请求和响应(上)
【SpringMVC】参数传递与用户请求和响应(上)
19 0
|
2月前
|
JSON JavaScript 前端开发
SpringMVC入门-注解配置和请求传参和响应数据 1
SpringMVC入门-注解配置和请求传参和响应数据
30 0
|
2月前
|
设计模式 JSON 前端开发
SpringMVC入门-注解配置和请求传参和响应数据 2
SpringMVC入门-注解配置和请求传参和响应数据
28 0
|
9月前
|
前端开发 Java 程序员
SpringMVC接收参数中文乱码解决方案
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
50 0
SpringMVC接收参数中文乱码解决方案
|
JSON Java 数据格式
Springboot | @RequestBody 接收到的参数对象属性为空
Springboot | @RequestBody 接收到的参数对象属性为空
618 0
Springboot | @RequestBody 接收到的参数对象属性为空
|
前端开发
[SpringMVC]请求与响应②(五种类型参数传递)
请求与响应②(五种类型参数传递)
[SpringMVC]请求与响应②(五种类型参数传递)
推荐文章
更多