在使用SpringMVC之类的框架时,有时候公共接口中有的参数是可选的,不传会抛异常,
首先呢是springMVC默认支持的绑定类型有:
HttpServletReequest对象:通过request对象可以获取参数信息
HttpservletResponse对象:通过response对象可以处理响应信息
HTTPSession对象:获取session中存储的对象
Model/ModelMap:Model是一个接口,ModelMap是一个接口的实现。作用是将模型数据填充到request域。
简单类型的参数绑定:
1、直接在controller中定义一个变量,但是此种传输方式有一个限制就是参数名和请求中的参数名必须保持一致,否则是接收不到数据的。
比如说:
Controller : public void controllerTest(Integer id){}
request : http://localhost:8080/springMvcTest/controllerTest?id=2; 在这儿必须写成"id=2"而不能写成“id”这个属性名不可变
2、使用@RequestParam进行参数绑定,在使用这个注解进行绑定的时候,参数名无需和请求中的参数名保持一致。
比如说:
Controller : public void controllerTest(@RequestParam(value="id") Integer goods_id){}
@RequestParam(value="id") Integer goods_id 表示将请求中的id属性绑定到goods_id这个参数上
request : http://localhost:8080/springDemo/controllerTest?id=2; 在这儿传入的参数名为id
在@RequestParam 中有一个属性叫做required @RequestParam(required=true)表示当前参数必须传入
@RequestParam 中还有一个属性叫做defaultValue 表示默认值 @RequestParam(defaultValue="aaa"),你懂得 不用多做介绍
3、POJO的绑定
在Controller中可以直接定义POJO类型的参数来接收请求中的数据。
这种使用方式的条件是:在页面中input的name属性的值必须和POJO的属性一一对应!
解决方案:
给可选的参数赋一个初始值:
如:
@RequestMapping(value = "/list", method = RequestMethod.GET)
public TKmPendingTskServiceResponse getWorkPoolListApi(
@RequestParam("PENDING_TSK_TYPE") String pendingTskType,
@RequestParam("PENDING_PRSN_ID") String pendingPrsnId,
@RequestParam("PENDING_STS_CD") String pendingStsCd,
@RequestParam("START_TIME") String startTime,
@RequestParam("END_TIME") String endTime,
@RequestParam("PENDING_TSK_NM") String pendingTskNm,
@RequestParam(name = "START") int start,
@RequestParam(name = "PAGE_NUM") int limit)
throws Exception {
···逻辑代码···
}
其中PENDING_TSK_TYPE字段是可有可无的,这个时候如果给他赋属性值:
@RequestParam(value = "PENDING_TSK_TYPE", required = false) String pendingTskType,
接口调用时如果参数未传,还是会抛异常;
原因是如果可选参数“PENDING_TSK_TYPE”不存在时,Spring默认将其赋值为null,此时参数还是缺省的,
最终解决办法,先给“PENDING_TSK_TYPE”赋个符合对应需求数据结构的初始值,比如String的话就是:
@RequestParam(value = "PENDING_TSK_TYPE", defaultValue = "") String pendingTskType,
这样只是暂时解决;
本文介绍了在使用SpringMVC和Spring Boot时如何处理可选参数,特别是通过@RequestParam注解实现参数绑定。讲解了@RequestParam的required和defaultValue属性,以及在POJO绑定时如何处理可选参数,建议给可选参数赋予初始值以避免异常。

316

被折叠的 条评论
为什么被折叠?



