当前位置: 代码迷 >> VC/MFC >> Spring MVC常用注解收拾
  详细解决方案

Spring MVC常用注解收拾

热度:192   发布时间:2016-05-02 03:19:27.0
Spring MVC常用注解整理
  1. @Controller

    Controller控制器是通过服务接口定义的提供访问应用程序的一种行为,它解释用户的输入,将其转换成一个模型然后将试图呈献给用户。Spring MVC 使用 @Controller 定义控制器,它还允许自动检测定义在类路径下的组件并自动注册。如想自动检测生效,需在XML头文件下引入 spring-context:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:p="http://www.springframework.org/schema/p"    xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="        http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd">    <context:component-scan base-package="org.springframework.samples.petclinic.web"/>    <!-- ... --></beans>
2. @RequestMapping我们可以 @RequestMapping 注解将类似 “/favsoft”这样的URL映射到整个类或特定的处理方法上。一般来说,类级别的注解映射特定的请求路径到表单控制器上,而方法级别的注解只是映射为一个特定的HTTP方法请求(“GET”,“POST”等)或HTTP请求参数。
@Controller@RequestMapping("/favsoft")public class AnnotationController {    @RequestMapping(method=RequestMethod.GET)    public String get(){        return "";    }    @RequestMapping(value="/getName", method = RequestMethod.GET)    public String getName(String userName) {        return userName;    }    @RequestMapping(value="/{day}", method=RequestMethod.GET)    public String getDay(Date day){        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");        return df.format(day);    }    @RequestMapping(value="/addUser", method=RequestMethod.GET)    public String addFavUser(@Validated FavUser favUser,BindingResult result){        if(result.hasErrors()){            return "favUser";        }        //favUserService.addFavUser(favUser);        return "redirect:/favlist";    }    @RequestMapping("/test")    @ResponseBody    public String test(){        return "aa";    }}
@RequestMapping 既可以作用在类级别,也可以作用在方法级别。当它定义在类级别时,标明该控制器处理所有的请求都被映射到 /favsoft [email protected] method 属性标记其所接受的方法类型,如果不指定方法类型的话,可以使用 HTTP GET/POST 方法请求数据,但是一旦指定方法类型,就只能使用该类型获取数据。@RequestMapping 可以使用 @Validated与BindingResult联合验证输入的参数,在验证通过和失败的情况下,分别返回不同的视图。@RequestMapping支持使用URI模板访问URL。URI模板像是URL模样的字符串,由一个或多个变量名字组成,当这些变量有值的时候,它就变成了URI。
  1. @PathVariable

    在Spring MVC中,可以使用 @PathVariable 注解方法参数并将其绑定到URI模板变量的值上。如下代码所示:

 String findOwner( String , Model model) {    FavUser favUser = favUserService.findFavUser();    model.addAttribute(     ;}

URI模板 “favusers/{favUserId}”指定变量的名字 favUserId ,当控制器处理这个请求的时候, favUserId的值会被设定到URI中。比如,当有一个像“favusers/favccxx”这样的请求时,favUserId的值就是 favccxx。

@PathVariable 可以有多个注解,像下面这样:@RequestMapping(value="/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET)public String findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {    Owner owner = ownerService.findOwner(ownerId);    Pet pet = owner.getPet(petId);    model.addAttribute("pet", pet);    return "displayPet";}
@PathVariable中的参数可以是任意的简单类型,如int, long, Date等等。Spring会自动将其转换成合适的类型或者抛出 TypeMismatchException异常。当然,我们也可以注册支持额外的数据类型。[email protected]<String, String>类型的参数时, Map会填充到所有的URI模板变量中。@PathVariable支持使用正则表达式,这就决定了它的超强大属性,它能在路径模板中使用占位符,可以设定特定的前缀匹配,后缀匹配等自定义格式。 @PathVariable还支持矩阵变量,因为现实场景中用的不多,这就不详细介绍了,有需要的童鞋请查看官网的文档。4. @RequestParam@RequestParam将请求的参数绑定到方法中的参数上,如下面的代码所示。其实,即使不配置该参数,注解也会默认使用该参数。如果想自定义指定参数的话,[email protected] required 属性设置为false([email protected](value="id",required=false))。5. @RequestBody@RequestBody是指方法参数应该被绑定到HTTP请求Body上。
@RequestMapping(value = "/something", method = RequestMethod.PUT)public void handle(@RequestBody String body, Writer writer) throws IOException {    writer.write(body);}

[email protected]@RequestParam趁手,我们可以使用 HttpMessageConverter将request的body转移到方法参数上, HttMessageConverser将 HTTP请求消息在Object对象之间互相转换,但一般情况下不会这么做。事实证明,@RequestBody在构建REST架构时,[email protected]

  1. @ResponseBody

    @[email protected],它的作用是将返回类型直接输入到HTTP response [email protected],会经常用到,代码见下图:

@RequestMapping(value = "/something", method = RequestMethod.PUT)@ResponseBodypublic String helloWorld() {    return "Hello World";}
7. @RestController我们经常见到一些控制器实现了REST的API,只为服务于JSON,XML或其它自定义的类型内容,@RestController用来创建REST类型的控制器,[email protected]@RestController就是这样一种类型,[email protected]@ResponseBody。
@RestControllerpublic class FavRestfulController {@RequestMapping(value="/getUserName",method=RequestMethod.POST)public String getUserName(@RequestParam(value="name") String name){return name;}}
8. HttpEntityHttpEntity除了能获得request请求和response响应之外,它还能访问请求和响应头,如下所示:
@RequestMapping("/something")public ResponseEntity<String> handle(HttpEntity<byte[]> requestEntity) throws UnsupportedEncodingException {    String requestHeader = requestEntity.getHeaders().getFirst("MyRequestHeader"));    byte[] requestBody = requestEntity.getBody();    // do something with request header and body    HttpHeaders responseHeaders = new HttpHeaders();    responseHeaders.set("MyResponseHeader", "MyValue");    return new ResponseEntity<String>("Hello World", responseHeaders, HttpStatus.CREATED);}
9. @ModelAttribute@ModelAttribute可以作用在方法或方法参数上,当它作用在方法上时,标明该方法的目的是添加一个或多个模型属性(model attributes)[email protected][email protected][email protected],示例如下:
@ModelAttributepublic Account addAccount(@RequestParam String number) {    return accountManager.findAccount(number);}@ModelAttributepublic void populateModel(@RequestParam String number, Model model) {    model.addAttribute(accountManager.findAccount(number));        // add more ...}
@ModelAttribute方法用来在model中填充属性,如填充下拉列表、宠物类型或检索一个命令对象比如账户(用来在HTML表单上呈现数据)。@ModelAttribute方法有两种风格:一种是添加隐形属性并返回它。另一种是该方法接受一个模型并添加任意数量的模型属性。用户可以根据自己的需要选择对应的风格。@ModelAttribute作用在方法参数上[email protected][email protected]?不在当前模型中,该参数先被实例化然后添加到模型中。一旦模型中有了该参数,该参数的字段应该填充所有请求参数匹配的名称中。这是Spring MVC中重要的数据绑定机制,它省去了单独解析每个表单字段的时间。@ModelAttribute是一种很常见的从数据库中检索属性的方法,[email protected]??况下,可以很方便的通过URI模板变量和类型转换器检索属性。

Spring3.0 引入 RESTful 架构风格支持([email protected] 注解和一些其他特性支持),且又引入了 更多的注解支持:
@CookieValue:cookie 数据到处理器功能处理方法的方法参数上的绑定;
@RequestHeader:请求头(header)数据到处理器功能处理方法的方法参数上的绑定;
@RequestBody:请求的 body 体的绑定(通过 HttpMessageConverter 进行类型转换);
@ResponseBody:处理器功能处理方法的返回值作为响应体(通过 HttpMessageConverter 进行类型转换);
@ResponseStatus:定义处理器功能处理方法/异常处理器返回的状态码和原因;
@ExceptionHandler:注解式声明异常处理器;
@PathVariable:请求 URI 中的模板变量部分到处理器功能处理方法的方法参数上的绑定,从而支持 RESTful 架构风 格的 URI,以后会详细介绍RESTful风格的Java Web实现。

  相关解决方案