标签:try 方便 request对象 mat strong 包装类 orm order mvc
默认是key/value格式,比如:http:xxxx?id=1&type=2
都是字符串类型的各种值
Controller类中的方法参数,比如简单类型、POJO类型、集合类型等。
默认内置了24种参数解析组件(ArgumentResolver)
就是将请求参数串中的value值获取到之后,在进行类型转换,然后将转换后的值赋值给Controller类中方法的形参,这个过程就是参数绑定
Controller方法形参中可以随时添加如下类型的参数,处理适配器会自动识别并进行赋值。
简单类型指的就是8种基本类型数据以及它们的包装类,还有String类型。
在SpringMVC中,对于java简单类型的参数,推荐的参数绑定方式有两种:
http请求参数的key和controller方法的形参名称一致
http://localhose:8080/xxx/findItem?id=1
请求参数的key为id
Controller的形参为Interger id,它和请求参数的key一致,所以直接绑定成功
@RequestMapping(value = "/findItem") public String findItem(Integer id) { System.out.println("接收到的请求参数是:"+ id); return "success"; }
请求参数key和controller方法的形参名称不一致时,需要使用@RequestParam注解才能将请求参数绑定成功。
http://localhost:8080/xxx/findItem?itemId=1
请求参数的key为itemId
Controller的形参为Integer id,它和请求的参数不一致,需要使用@RequestParam注解才能绑定成功
@RequestMapping(value = "/findItem") // 通过@RequestParam注解绑定简单类型 public String findItem(@RequestParam("itemId") Integer id) { System.out.println("接收到的请求参数是:"+ id); return "success"; }
value:参数名字,即入参的请求参数名字,如value="itemId"表示请求的参数中的名字为itemId的参数的值将传入
required:是否必须,默认是true,表示请求中一定要有响应的参数,否则将报;
http Status 400 - Required Integer parameter ‘xxx‘ is not present
defaultValue:默认值,表示如果请求中没有同名参数时的默认值
@RequestMapping(value = "/findItem") // 通过@RequestParam注解绑定简单类型 // 学习@RequestParam注解中的value、required、defaultValue属性 public String findItem ( @RequestParam(value = "itemId", required = true, defaultValue = "2") Integer id) { System.out.println("接收到的请求参数是:"+ id); return "success"; }
控制器方法的参数类型是POJO类型。
要求表单中参数名称和POJO类的属性名称保持一致。
http://localhost:8080/xxx/updateItem?id=!&name=iphone&price=1000
POJO定义:
Controller方法
@RequestMapping("/updateItem") public String updateItem(Integer id,Items item) { System.out.println("接收到的请求参数是:"+ id); System.out.println("接收到的请求参数是:"+ item); return "success"; }
包装POJO类,依然是一个POJO,只是说为了方便沟通,将POJO中包含另一个POJO的这种类,称之为包装POJO。
public class ItemQueryVO { //商品信息 private Items item; }
查询条件: <table width="100%" border=1> <tr> <td>商品名称:<input type="text" name="items.name" /></td> <td><input type="submit" value="查询" /></td> </tr> </table>
测试方法:断点跟踪,查看vo中的item对象是否有值
通过HTTP请求批量传递简单类型数据的情况,Controller方法中可以用String[]或者POJO的String[]属性接收(二选一),但是不能使用集合接收。
http://localhost:8080/xxx/deleteItem?id=1&id=2&id=3
@RequestMapping("/deleteItem") public String deleteitem(Integer[] itemId){ return "success"; }
批量传递的请求参数,最终要使用List<POJO>来接收,那么这个List<POJO>必须放在另一个POJO类中。
public class ItemQueryVO { // 商品信息 private Item item; // 其他信息 // 商品信息集合 private List<Items> itemsList; }
http://localhost:8080/xxx/batchUpdateItem?itemsList[0].id=1&itemsList[0].name=iphone&itemsList[0].price=1000&itemsList[1].id=2&itemsList[1].name=华为&items[1].price=5000
@RequestMapping("/batchUpdateItem") public String batchUpdateItem(ItemQueryVO vo) { return "success"; }
http://localhost:8080/xxx/saveItem?date=2019-12-4
@RequestMapping("/saveItem") public String saveItem(String date){ System.out.println("接收到的请求参数是:"+ date); return "success"; }
但是如何将date参数的类型有String改为Date,则报错
public class DateConverter implements Converter<String, Date> { @Override public Date convert(String source) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { return simpleDateFormat.parse(source); } catch (ParseException e) { e.printStackTrace(); } return null; } }
在springmvc.xml中,进行以下配置
<!-- 加载注解驱动 --> <mvc:annotation-driven conversion-service="conversionService"/> <!-- 转换器配置 --> <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="com.cyb.ssm.controller.converter.DateConverter"/> </set> </property> </bean>
标签:try 方便 request对象 mat strong 包装类 orm order mvc
原文地址:https://www.cnblogs.com/chenyanbin/p/11980465.html