标签:val 构造器 show ams 路径 存在 local bsp long
在前面的小节中,我们配置了注解驱动和自动扫描包,然后就可以使用SpringMVC相关注解了。
@Controller用来修饰类,源码如下:
package org.springframework.stereotype;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
String value() default "";
}
(1)被@Component修饰,说明此注解用来标识一个bean。
(2)用来说明被修饰的类为控制器类。
@RequestMapping注解用来修饰类或方法,源码如下:
package org.springframework.web.bind.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
String[] value() default {};
RequestMethod[] method() default {};
String[] params() default {};
String[] headers() default {};
String[] consumes() default {};
String[] produces() default {};
}
(1) value
value属性用将请求URL(如"/hello") 映射到整个类或特定的处理方法上。
value属性是RequestMapping的默认属性,也就是说 @RequestMapping( value = "/hello") 可以写成 @RequestMapping("/hello") 。
(2)method
method 属性用来指定如下请求方式:GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE.
@RequestMapping(value= "/hello",Method=RequestMethod.GET ) 可简写成 @GetMapping("/hello")
类似注解还有:
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
Spring 会为如下类型的参数自动注入其bean对象。
见:https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-arguments
可用如下注解用来修饰请求参数。
可通过RequestParam来接收请求参数
@Controller
@RequestMapping("/pets")
public class EditPetForm {
// ...
@GetMapping
public String setupForm(@RequestParam("petId") int petId, Model model) {
Pet pet = this.clinic.loadPet(petId);
model.addAttribute("pet", pet);
return "petForm";
}
// ...
}
2.@RequestHeader
通过此注解可以获取请求头相关信息。
例如,一个请求头为:
Host localhost:8080 Accept text/html,application/xhtml+xml,application/xml;q=0.9 Accept-Language fr,en-gb;q=0.7,en;q=0.3 Accept-Encoding gzip,deflate Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive 300
则可以通过如下方式获取请求头信息
@GetMapping("/demo") public void handle( @RequestHeader("Accept-Encoding") String encoding, @RequestHeader("Keep-Alive") long keepAlive) { //... }
@CookieValue
获取cookie
@GetMapping("/demo") public void handle(@CookieValue("JSESSIONID") String cookie) { //... }
PathVariable
可通过@PathVariable 来接收路径变量
@Controller
@RequestMapping("/owners/{ownerId}")
public class OwnerController {
@GetMapping("/pets/{petId}")
public Pet findPet(@PathVariable Long ownerId, @PathVariable Long petId) {
// ...
}
}
ModelAttribute
标注在方法参数上的@ModelAttribute说明了该方法参数的值将由model中取得。如果model中找不到,那么该参数会先被实例化,然后被添加到model中。在model中存在以后,请求中所有名称匹配的参数都会填充到该参数中。
@PostMapping("/owners/{ownerId}/pets/{petId}/edit") public String processSubmit(@ModelAttribute Pet pet) { }
以上面的代码为例,这个Pet类型的实例可能来自哪里呢?有几种可能:
标签:val 构造器 show ams 路径 存在 local bsp long
原文地址:https://www.cnblogs.com/shirui/p/9575707.html