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的使⽤来消除 t ,get⽅法。Autowired默认先按byType,如果发现找到多个bean,则,⼜按照byName⽅式⽐对,如果还有多个,则报出异常。
例⼦:
@Autowired(避免了必须new⼀个对象)
private ExamUrMapper examUrMapper; - ExamUrMapper是⼀个接⼝
1. 先找类型为ExamUrMapper的bean
2. 如果存在且唯⼀,则OK;
3. 如果不唯⼀,在结果集⾥,寻找name为examUrMapper的bean。因为bean的name有唯⼀性,所以,到这⾥应该能确定是否存在满⾜要求的bean了
4.
URL路径映射
4.1、普通URL路径映射
@RequestMapping(value={"/test1", "/ur/create"}):多个URL路径可以映射到同⼀个处理器的功能处理⽅法。
4.2、URI模板模式映射
@RequestMapping(value="/urs/{urId}"):{×××}占位符,请求的URL可以是 “/urs/123456”或
“/urs/abcd”,@PathVariable可以提取URI模板模式中的{×××}中的×××变量。
@RequestMapping(value="/urs/{urId}/create"):这样也是可以的,请求的URL可以是“/urs/123/create”。
@RequestMapping(value="/urs/{urId}/topics/{topicId}"):这样也是可以的,请求的URL可以是“/urs/123/topics/123”。
4.3、Ant风格的URL路径映射
@RequestMapping(value="/urs/**"):可以匹配“/urs/abc/abc”,但“/urs/123”将会被【URI模板模式映射中的“/urs/{urId}”模式优先映射到】【详见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模板模式映射是{urId},不能指定模板变量的数据类型,如是数字还是字符串;
正则表达式风格的URL路径映射,可以指定模板变量的数据类型,可以将规则写的相当复杂。
4.5、组合使⽤是“或”的关系
如@RequestMapping(value={"/test1", "/ur/create"}) 组合使⽤是或的关系,即“/test1”或“/ur/create”请求URL路径都可以映射到
@RequestMapping指定的功能处理⽅法。
@RequestParam: someUrl/{paramId}, 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到⽅法的参数上。
1.Spring MVC – URI Templates例⼦
在spring mvc中通过url路径来访问控制器中的⽅法,可以在⽤@RequestMapping注解的路径中使⽤URI模板。使⽤@PathVariable注解来指明⽅法中的参数应该对应URI模板中的变量,如下例⼦:
否决权
when和while的区别
@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
publicString findOwner(@PathVariableString 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)
publicString findOwner(@PathVariable("ownerId") String theOwner, Model model) {
// implementation omitted
}
cuc
当然,也可以使⽤多个@PathVariable来绑定多个URI模板变量,如下:
@RequestMapping(value="/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET)
publicString findPet(@PathVariableString ownerId, @PathVariableString petId, Model model) {
Owner owner = ownerService.findOwner(ownderId);
Pet pet = Pet(petId);
model.addAttribute("pet", pet);
return"displayPet";
}
下⾯的代码展⽰使⽤变量作为相对路径,当请求为/owners/42/pets/21,会调⽤findPet()⽅法。
@Controller
@RequestMapping("/owners/{ownerId}")
publicclassRelativePathUriTemplateController {
@RequestMapping("/pets/{petId}")
publicvoidfindPet(@PathVariableString ownerId, @PathVariableString 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.我回来了日语
localhost:8080/Springmvc/ur/page.do?pageSize=3&pageNow=2
可以把这地址分开理解,其中问号前半部分:localhost:8080/Springmvc/ur/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上的地址为例,/problems/101566 这个如果对应sprimgmvc⾥⾯,想获取问题编号101566,因为这个地址直接就是请求路径,是⼀个url,所以代码中⽤的应该是 @PathVariable,如下:
@RequestMapping(value="/problems/{problemId}")
public String showProblem(@PathVariable int problemId){}
@RequestParam:在SpringMVC后台控制层获取参数.
@PathVariable是⽤来获得请求url中的动态参数it is my life
@PathVariable和@RequestParam,分别是从路径⾥⾯去获取变量,也就是把路径当做变量,后者是从请求⾥⾯获取参数。