java常用注解,URL地址映射
@param: 在参数上使用@Param(“paramName”)注解”解决了传多个参数的问题。
@Param("id") Integer id
param里面的这个id是在mapper xml文件里用的变量名,Integer 后面的这个id 是函数的参数,名字可以和param里的名字不一样
@RequestMapping:处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
属性:
1、 value, method;
value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
method: 指定请求的method类型, GET、POST、PUT、DELETE等;
2、consumes,produces;
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
3、 params,headers;
params: 指定request中必须包含某些参数值时,才让该方法处理。
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
@Autowired:对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。
Autowired默认先按byType,如果发现找到多个bean,则,又按照byName方式比对,如果还有多个,则报出异常。
例子:
@Autowired(避免了必须new一个对象)
private ExamUserMapper examUserMapper; - ExamUserMapper是一个接口
1. spring先找类型为ExamUserMapper的bean
2. 如果存在且唯一,则OK;
3. 如果不唯一,在结果集里,寻找name为examUserMapper的bean。因为bean的name有唯一性,所以,到这里应该能确定是否存在满足要求的bean了
4.
URL路径映射
4.1、普通URL路径映射
@RequestMapping(value={"/test1", "/user/create"}):多个URL路径可以映射到同一个处理器的功能处理方法。
4.2、URI模板模式映射
@RequestMapping(value="/users/{userId}"):{×××}占位符, 请求的URL可以是 “/users/123456”或
“/users/abcd”,@PathVariable可以提取URI模板模式中的{×××}中的×××变量。
@RequestMapping(value="/users/{userId}/create"):这样也是可以的,请求的URL可以是“/users/123/create”。
@RequestMapping(value="/users/{userId}/topics/{topicId}"):这样也是可以的,请求的URL可以是“/users/123/topics/123”。
4.3、Ant风格的URL路径映射
@RequestMapping(value="/users/**"):可以匹配“/users/abc/abc”,但“/users/123”将会被【URI模板模式映射中的“/users/{userId}”模式优先映射到】【详见4.14的最长匹配优先】。
@RequestMapping(value="/product?"):可匹配“/product1”或“/producta”,但不匹配“/product”或“/productaa”;
@RequestMapping(value="/product*"):可匹配“/productabc”或“/product”,但不匹配“/productabc/abc”;
@RequestMapping(value="/product/*"):可匹配“/product/abc”,但不匹配“/productabc”;
@RequestMapping(value="/products/**/{productId}"):可匹配“/products/abc/abc/123”或“/products/123”,也就是Ant风格和URI模板变量风格可混用;
4.4、正则表达式风格的URL路径映射
正则表达式风格的URL路径映射是一种特殊的URI模板模式映射:
URI模板模式映射是{userId},不能指定模板变量的数据类型,如是数字还是字符串;
正则表达式风格的URL路径映射,可以指定模板变量的数据类型,可以将规则写的相当复杂。
4.5、组合使用是“或”的关系
如@RequestMapping(value={"/test1", "/user/create"}) 组合使用是或的关系,即“/test1”或“/user/create”请求URL路径都可以映射到@RequestMapping指定的功能处理方法。
@RequestParam: someUrl/{paramId}, 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上。
1.Spring MVC – URI Templates例子
在spring mvc中通过url路径来访问控制器中的方法,可以在用@RequestMapping注解的路径中使用URI模板。使用@PathVariable注解来指明方法中的参数应该对应URI模板中的变量,如下例子:
@RequestMapping (value= "/owners/{ownerId}" , method=RequestMethod.GET) public String findOwner( @PathVariable String ownerId, Model model) { Owner owner = ownerService.findOwner(ownerId); model.addAttribute( "owner" , owner); return "displayOwner" ; } |
URI模板”/owners/{ownerId}”指定了变量名为ownerId。当方法被请求的时候ownerId的值会被赋值为请求的 URI,比如一个请求为/owners/fred,那么方法中的ownerId参数会赋值为fred。必须保证参数名和URI模板变量名一致才能自动赋 值,想自定义参数变量需要在@PathVariable注解中加入参数,如下:
@RequestMapping (value= "/owners/{ownerId}" , method=RequestMethod.GET) public String findOwner( @PathVariable ( "ownerId" ) String theOwner, Model model) { // implementation omitted } |
当然,也可以使用多个@PathVariable来绑定多个URI模板变量,如下:
@RequestMapping (value= "/owners/{ownerId}/pets/{petId}" , method=RequestMethod.GET) public String findPet( @PathVariable String ownerId, @PathVariable String petId, Model model) { Owner owner = ownerService.findOwner(ownderId); Pet pet = owner.getPet(petId); model.addAttribute( "pet" , pet); return "displayPet" ; } |
下面的代码展示使用变量作为相对路径,当请求为/owners/42/pets/21,会调用findPet()方法。
@Controller @RequestMapping ( "/owners/{ownerId}" ) public class RelativePathUriTemplateController { @RequestMapping ( "/pets/{petId}" ) public void findPet( @PathVariable String ownerId, @PathVariable String petId, Model model) { // implementation omitted } } |
@PathVariable和方法中的参数可以是任何简单数据类型,例如:int,long,Date,等等。spring会自动转换,如果不匹配则抛出TypeMismatchException。
2.@RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,后来发现用 JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List.
3.
http://localhost:8080/Springmvc/user/page.do?pageSize=3&pageNow=2
可以把这地址分开理解,其中问号前半部分:http://localhost:8080/Springmvc/user/page.do 这个就是路径,是你的请求url,而如果这个路径上有数据匹配,用的就是@PathVariable 如
@RequestMapping(value="/page{pageNo}.do")
public String page(@PathVariable int pageNo){}
【注意:看下这地方的@RequestMapping的地址,对照我上面说的路径】
而问号的后面部分就是请求参数部分,是要向请求路径提交的参数信息,用的就是@RequestParam ,对于这种参数,如果你要用的话,代码应该如下:
@RequestMapping(value="/page.do")
public String page(@RequestParam int pageSize,@RequestParam int pageNow){}
【注意:这个代码的RequestMapping地址只需要/page.do就行】
其实你只要把什么叫请求路径,什么叫请求参数分清楚,也就能理解@PathVariable和@RequestParam
我再举个例子,就拿你这个问题在iteye上的地址为例,http://www.iteye.com/problems/101566 这个如果对应sprimgmvc里面,想获取问题编号101566,因为这个地址直接就是请求路径,是一个url,所以代码中用的应该是 @PathVariable,如下:
@RequestMapping(value="/problems/{problemId}")
public String showProblem(@PathVariable int problemId){}
@RequestParam:在SpringMVC后台控制层获取参数.
@PathVariable是用来获得请求url中的动态参数
@PathVariable和@RequestParam,分别是从路径里面去获取变量,也就是把路径当做变量,后者是从请求里面获取参数。
- java 检测一个URL地址是否有效
- 常用java开发资源链接地址
- 在EasyDBO中使用Java注解配置映射的原理及使用
- 基于Spring注解的WEB MVC开发,URL映射
- Spring 中 MongDB java Bean 的映射配置(注解方式)
- javaWeb开发中URL地址的书写总结
- 常用数据库的驱动程序和Url地址
- 基于注解的Spring MVC的URL与Controller映射关系提取的实现分析
- Urlrewritefilter(Java Web 地址隐藏)
- 常用java开发使用到的工具以及下载地址 - Java开发软件列表
- 工具函数(JAVA)---判断url是否为网络地址
- java常用的插件地址
- java使用Url获取sql文件的地址读取sql
- java中常用的注解
- 常用数据库JDBC驱动下载地址及URl用法汇总
- Java常用正则表达式验证类完整实例【邮箱、URL、IP、电话、身份证等】
- 常用的开源svn的URL地址
- EasyDBO中Java注解配置映射的原理及使用
- JAVA 基于注解的报表映射
- mybatis 映射sql常用注解