[关闭]
@CLSChen 2019-10-01T14:39:59.000000Z 字数 2250 阅读 722

SpringMVC注解类型

未分类


注解类型

@Controller

指示Spring类的实例是一个控制器
Spring使用扫描机制来找到应用程序中所有基于注解的控制器类。我们要做两件事情:
1.声明spring-context。
2.应用component元素。
总之就是在配置文件中声明控制器所在的包的位置。

@RequestMapping

映射一个请求和一个方法,可以用@RequestMapping注解一种方法或类。
@RequestMapping后面跟的值加在网址后面,即可跳转到它修饰的方法(类)。

  1. @RequestMapping(value = "/input") 等价于
  2. @RequestMapping("input")
  3. method用于指示该方法仅处理哪些HTTP方法
  4. @RequestMapping(value = "/input",
  5. method = {RequestMethod.POST, RequestMethod.PUT})
  6. 如果只有一个方法就不需要花括号
  7. @RequestMapping(value = "/input", method = RequestMethod.PUT)
  8. 如果没有指定method值,那么就可以处理任意HTTP方法

@RequestMapping修饰一个类时,里面的方法先映射到类的@RequestMapping上,再映射到方法的@RequestMapping上。

  1. @RequestMapping("/Customer")
  2. public class CustomerController{
  3. @RequestMapping("/123")
  4. public String method(){}
  5. }
  6. 要对应到method的网址后缀为"/Customer/123"

在@RequestMapping修饰的方法中,可以传入一些对象,Spring会自动帮我们识别这些对象。如:

  1. @RequestMapping
  2. public String method(HttpServletRequest request, Locale locale)
  3. 可以使用这些对象:
  4. HttpServletRequest, HttpServletResponse, HttpSession, InputStream, OutputStream, Model, ModelMap...
  5. 可以返回这些对象:
  6. ModelAndView, Model, Map, View, String, void, Callable, DeferredResult...

@AutoWired 和 @Service

将依赖注入到SpringMVC控制器最简单的方法是通过@Autowired到字段或方法。
此外,为了能作为依赖注入,类必须要注明为@Service。

  1. @Controller
  2. public class ProductController{
  3. @AutoWired
  4. private ProductService productService;
  5. // 使用@AutoWried注解会使得ProductService的一个实例被注入到ProductController实例中。
  6. }
  7. 为了能被Spring扫描到,必须为类标注@Service
  8. @Service
  9. public class ProductServiceImpl implements ProductService{}

在配置文件中,有两个scan元素,分别用来扫描控制器类和服务类。

@RequestParam 和 @PathVariable

可以通过URL来向服务器发送值。有两种方法:

  1. http://localhost:8080/?productId=3
  2. 1.使用HttpServletRequestgetParameter方法来获取一个请求参数值。
  3. String productId = httpServletRequest.getParameter("productId");
  4. 2.@RequestParam添加到方法参数中直接获取值。
  5. public void sendProduct(@RequestParam int productId){}

还可以使用路径变量

  1. http://localhost:8080/view-product/1/2
  2. @RequestMapping(value = "/view-product/{userId}/{orderId}")
  3. public void sendProduct(@PathVariable int userId,
  4. @PathVariable int orderId){}

@ModelAttribule

我们知道,在调用请求处理方法时,会创建Model类型的一个实例。我们可以在方法中添加一个(Model model)参数来使用该实例,还可以通过@ModelAttribule注解来访问Model实例。

  1. 每次调用如下方法,会使用键值orderOrder实例添加到Model对象中。
  2. public String submitOrder(@ModelAttribute Order order, Model model)

@ModelAttribule的第二个用途是标注一个非请求的处理方法。被@ModelAttribule注解的方法会在每次调用该控制器类的请求处理方法时被调用。这意味着只要被它注解的方法会被调用的更为频繁。

  1. @ModelAttribule
  2. public Product addProduct(@RequestParam String productId){
  3. return productService.get(productId);
  4. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注