SpringMVC 常用注解
1、@Controller
@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。
@Controller 标记在一个类上还不能真正意义上的说它就是SpringMVC 的一个控制器类,因为这个时候Spring 还不认识它。这个时候就需要我们把这个控制器类交给Spring 来管理。有两种方式可以管理:
<!--方式一--> <bean class="com.cqvie.handler.HelloWorld"/> <!--方式二--> < context:component-scan base-package = "com.cqvie" /> <!-- 路径写到controller的上一层 -->
此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。为了先对Controller 有一个初步的印象,以下先定义一个简单的Controller :
package com.cqvie.handler; import org.springframework.stereotype.Controller; @Controller public class HelloWorld { @RequestMapping("/helloworld") public String sayHello() { System.out.println("Hello World!"); return "success"; } }
2、@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
返回值会通过视图解析器解析为实际的物理视图,对于 InternalResourceViewResolver 视图解析器,会做如下的解析:
通过 prefix + returnVal + suffix 这样的方式得到实际的物理视图,然后做转发操作;
<!-- 配置视图解析器:如何把 handler 方法返回值解析为实际的物理视图 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"></property> <property name="suffix" value=".jsp"></property> </bean>
RequestMapping注解有六个属性:
1)、value
value:指定请求的实际地址;
2)、method;
method: 指定请求的method类型, GET、POST、PUT、DELETE等,下面例子的@PathVariable后面讲解:
/** * Rest 风格的 URL(以 CRUD 为例): * 新增:/order POST * 修改:/order/1 PUT * 获取:/order/1 GET * 删除:/order/1 DELETE * @param id * @return */ @RequestMapping(value = "/testRestPut/{id}", method = RequestMethod.PUT) public String testRestPut(@PathVariable int id) { System.out.println("testRestPut:" + id); return SUCCESS; } @RequestMapping(value = "/testRestDelete/{id}", method = RequestMethod.DELETE) public String testRestDelete(@PathVariable int id) { System.out.println("testRestDelete:" + id); return SUCCESS; } @RequestMapping(value = "/testRestPost/{id}", method = RequestMethod.POST) public String testRestPost(@PathVariable int id) { System.out.println("testRestPost:" + id); return SUCCESS; } @RequestMapping("/testRestGet") public String testRestGet() { System.out.println("testRestGet"); return SUCCESS; }
3)、consumes
consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
4)、produces
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
5)、params
params: 指定request中必须包含某些参数值是,才让该方法处理。
6)、headers
headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。
@RequestMapping("/helloword/?/aa") 的 Ant 路径,匹配符:
● ?:匹配文件名的一个字符
● *:匹配文件名的所有字符
● **:匹配多层路径
@RequestMapping("/testPojo") POJO类用法:
@RequestMapping("/testPojo") public String testPojo(User user) { System.out.println("testPojo:" + user); return "success"; } @RequestMapping("/testPojo") Map用法: @RequestMapping("/testMap") public String testMap(Map<String, Object> map) { map.put("names", Arrays.asList("Tomcat", "Eclipse", "JavaEE")); return "success"; } @RequestMapping("/testPojo") ModelAndView用法: @RequestMapping("/testModelAndView") public ModelAndView testModelAndView() { String viewName = SUCCESS; ModelAndView modelAndView = new ModelAndView(viewName); modelAndView.addObject("time", new Date()); return modelAndView; }
3、@Resource和@Autowired
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。
1)、共同点
两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。
2)、不同点
(1)@Autowired
@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。
public class HelloWorld{ // 下面两种@Autowired只要使用一种即可 @Autowired private UserDao userDao; // 用于字段上 @Autowired public void setUserDao(UserDao userDao) { // 用于属性的方法上 this.userDao = userDao; } }
@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。如下:
public class HelloWorld{ @Autowired @Qualifier("userDao") private UserDao userDao; }
(2)@Resource
@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。
public class HelloWorld{ // 下面两种@Resource只要使用一种即可 @Resource(name="userDao") private UserDao userDao; // 用于字段上 @Resource(name="userDao") public void setUserDao(UserDao userDao) { // 用于属性的setter方法上 this.userDao = userDao; } }
注:最好是将@Resource放在setter方法上,因为这样更符合面向对象的思想,通过set、get去操作属性,而不是直接去操作属性。
4、@PathVariable
用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。如:
@Controller public class TestController { @RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET) public String getLogin(@PathVariable("userId") String userId, @PathVariable("roleId") String roleId){ System.out.println("User Id : " + userId); System.out.println("Role Id : " + roleId); return "hello"; } @RequestMapping(value="/product/{productId}",method = RequestMethod.GET) public String getProduct(@PathVariable("productId") String productId){ System.out.println("Product Id : " + productId); return "hello"; } @RequestMapping(value="/javabeat/{regexp1:[a-z-]+}", method = RequestMethod.GET) public String getRegExp(@PathVariable("regexp1") String regexp1){ System.out.println("URI Part 1 : " + regexp1); return "hello"; } }
5、@CookieValue
作用:用来获取Cookie中的值;
参数: value:参数名称 required:是否必须 defaultValue:默认值
使用案例:
/** * 获取 Session * JSESSIONID=411A032E02A2594698F6E3F4458B9CE4 */ @RequestMapping("/testCookieValue") public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) { System.out.println("JSESSIONID = " + sessionId); return "success"; }
6、@RequestParam
@RequestParam用于将请求参数区数据映射到功能处理方法的参数上,用例:
/** * @RequestParam("id") 带参映射 * @param id * @return */ @RequestMapping("/testRequestParam") public String testRequestParam(@RequestParam("id") int id) { System.out.println("testRequestParam " + id); return "success"; }
7、@SessionAttributes
@SessionAttributes即将值放到session作用域中,写在class上面。
@SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外(value 属性值),
还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中(types 属性值),用例:
package com.cqvie.yjq; import java.util.Map; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.SessionAttributes; import com.cqvie.model.User; @SessionAttributes(value = {"user"}, types = {String.class}) @RequestMapping("/springmvc") @Controller public class SessionAttributesTest { /** * @SessionAttributes * 除了可以通过属性名指定需要放到会话中的属性外(value 属性值), * 还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中(types 属性值)。 * 注意: 该注解只能放在类的上面,不能放在方法上面 * * @return */ @RequestMapping("/testSessionAttributes") public String testSessionAttributes(Map<String, Object> map) { User user = new User(1, "刘邦", "qwe", "123", "辽宁"); map.put("user", user); map.put("school", "重庆"); return "success"; } }
8、@ModelAttribute
代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。
package com.cqvie.yjq; import java.util.Map; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import com.cqvie.model.User; @Controller @RequestMapping("/springmvc") public class ModelAttributeTest { private static final String SUCCESS = "success"; /** * 1.有 @ModelAttribute 标记的方法,会在每个目标方法执行之前被 SpringMVC 调用 * 2.@ModelAttribute注解也可以修饰目标方法POJO类形的入参,其value的属性值有如下作用: * 1)SpringMVC会使用value属性值在implicitModel中查找对应的对象,若存在则直接传入到目标方法的入参中 * 2)SpringMVC会以value为key,POJO类型的对象为value,存入的request中 * * @param id * @param map */ @ModelAttribute public void getUser(@RequestParam(value = "id", required = false) int id, Map<String, Object> map) { //模拟数据库中获取对象 User user = new User(1, "刘邦", "123", "023", "重庆"); System.out.println("从数据库中获取一个对象:" + user); map.put("abc", user); } /** * 运行流程: * 1.执行@ModelAttribute注解修饰的方法,从数据库中取出对象,把对象放入Map中,键为:user; * 2.SpringMVC从Map中取出User对象,并把表单的请求参数赋值给该User对象的对应属性; * 3.SpringMVC把上述对象传入目标方法的参数。 * * 注意:在@ModelAttribute修饰的方法中,放入到Map时的键需要和目标方法入参类型的第一个字母小写的字符串一致 * * @param user * @return */ @RequestMapping("/testModelAttribute") public String testModelAttribute(@ModelAttribute("abc") User user) { System.out.println("修改:" + user); return SUCCESS; } }
9、@ResponseBody
作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
本文来自php中文网,java教程栏目,欢迎学习!
Atas ialah kandungan terperinci springmvc常用注解有哪些?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel ini membincangkan menggunakan Maven dan Gradle untuk Pengurusan Projek Java, membina automasi, dan resolusi pergantungan, membandingkan pendekatan dan strategi pengoptimuman mereka.

Artikel ini membincangkan membuat dan menggunakan perpustakaan Java tersuai (fail balang) dengan pengurusan versi dan pergantungan yang betul, menggunakan alat seperti Maven dan Gradle.

Artikel ini membincangkan pelaksanaan caching pelbagai peringkat di Java menggunakan kafein dan cache jambu untuk meningkatkan prestasi aplikasi. Ia meliputi persediaan, integrasi, dan faedah prestasi, bersama -sama dengan Pengurusan Dasar Konfigurasi dan Pengusiran PRA Terbaik

Artikel ini membincangkan menggunakan JPA untuk pemetaan objek-relasi dengan ciri-ciri canggih seperti caching dan pemuatan malas. Ia meliputi persediaan, pemetaan entiti, dan amalan terbaik untuk mengoptimumkan prestasi sambil menonjolkan potensi perangkap. [159 aksara]

Kelas kelas Java melibatkan pemuatan, menghubungkan, dan memulakan kelas menggunakan sistem hierarki dengan bootstrap, lanjutan, dan pemuat kelas aplikasi. Model delegasi induk memastikan kelas teras dimuatkan dahulu, yang mempengaruhi LOA kelas tersuai


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

Dreamweaver Mac版
Alat pembangunan web visual

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini