注解在类上,表明这个类是
- @Controller
- Spring
里面的
- MVC
,将其声明为
- Controller
的一个
- Spring
,
- Bean
会自动扫描注解了此注解的类,并将请求映射到注解了
- DispatcherServlet
的方法上,这里特别指出,在声明普通
- @RequestMapping
的时候,使用
- Bean
,
- @Component
,
- @Service
和
- @Repository
是等同的,因为
- @Controller
,
- @Controller
,
- @Service
都组合了
- @Repository
元注解,但在
- @Component
- Spring
声明控制器
- MVC
的时候,只能使用
- Bean
。
- @Controller
注解是用来映射
- @RequestMapping
请求(访问路径和参数),处理类和方法的。
可注解在类或者方法上。注解在方法上的
- @RequestMapping
路径会继承注解在类上的路径,
- @RequestMapping
支持
- @RequestMapping
的
- Servlet
和
- request
作为参数,也支持对
- response
和
- request
的媒体类型进行配置。
- response
支持将返回值放在
- @ResponseBody
体内,而不是返回一个页面。我们在很多基于
- response
程序的时候,可以以此注解返回数据而不是页面;此注解可放置在返回值前或者方法上。
- Ajax
允许
- @RequestBod
的参数在
- request
体内,而不是直接链接在地址后面。此注解放置在参数前。
- request
用来接收路径参数,如
- @PathVariable
,可接收
- /news/001
作为参数,此注解放置在参数前。
- 001
是一个组合注解,组合了
- @RestController
和
- @Controller
,这就意味着当你只开发一个和页面交互数据的控制的时候,需要使用此注解。若没有此注解,要想实现上述功能,则需要自己在代码中加
- @ResponseBody
和
- @Controller
两个注解。
- @ResponseBody
添加
以及相关依赖,获得对象和
- jackson
和
- json
之间的转换
- xml
- <!--对json和xml格式的支持 -->
- <dependency>
- <groupId>com.fasterxml.jackson.dataformat</groupId>
- <artifactId>jackson-dataformat-xml</artifactId>
- <version>2.5.3</version>
- </dependency>
这里特别指出,在实际项目中,我们其实主要支持
数据,没必要同时支持
- json
和
- json
,因为
- xml
比
- json
更加简洁。由于
- xml
的广泛使用,
- JavaScript
成为最推荐的格式,在这种情况下,我们的依赖包如下(上面的依赖包含下面的依赖):
- json
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <version>2.5.3</version>
- </dependency>
此类用来演示获取
对象参数和返回此对象到
- request
:
- response
- package org.light4j.springMvc4.domain;
- public class DemoObj {
- private Long id;
- private String name;
- public DemoObj() { //①
- super();
- }
- public DemoObj(Long id, String name) {
- super();
- this.id = id;
- this.name = name;
- }
- public Long getId() {
- return id;
- }
- public void setId(Long id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
①
对对象和
- jackson
做转换时一定要此空构造。
- json
- package org.light4j.springMvc4.web;
- import javax.servlet.http.HttpServletRequest;
- import org.light4j.springMvc4.domain.DemoObj;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.ResponseBody;
- @Controller // ①
- @RequestMapping("/anno") //②
- public class DemoAnnoController {
- @RequestMapping(produces = "text/plain;charset=UTF-8") // ③
- public@ResponseBody String index(HttpServletRequest request) { // ④
- return "url:" + request.getRequestURL() + " can access";
- }
- @RequestMapping(value = "/pathvar/{str}", produces = "text/plain;charset=UTF-8") // ⑤
- public@ResponseBody String demoPathVar(@PathVariable String str, //③
- HttpServletRequest request) {
- return "url:" + request.getRequestURL() + " can access,str: " + str;
- }
- @RequestMapping(value = "/requestParam", produces = "text/plain;charset=UTF-8") //⑥
- public@ResponseBody String passRequestParam(Long id, HttpServletRequest request) {
- return "url:" + request.getRequestURL() + " can access,id: " + id;
- }
- @RequestMapping(value = "/obj", produces = "application/json;charset=UTF-8") //⑦
- @ResponseBody // ⑧
- public String passObj(DemoObj obj, HttpServletRequest request) {
- return "url:" + request.getRequestURL() + " can access, obj id: " + obj.getId() + " obj name:" + obj.getName();
- }
- @RequestMapping(value = {
- "/name1",
- "/name2"
- },
- produces = "text/plain;charset=UTF-8") //⑨
- public@ResponseBody String remove(HttpServletRequest request) {
- return "url:" + request.getRequestURL() + " can access";
- }
- }
①
注解声明此类是一个控制器 ②
- @Controller
映射此类的访问路径是
- @RequestMapping("/anno")
。 ③ 此方法未标注路径,因此使用类级别的路径
- /anno
;
- /anno
可定制返回的
- produces
的媒体类型和字符集,或返回值是
- response
对象,则设置
- json
,在后面会演示此项特性。 ④ 演示可接受
- porduces="application/json;charset=UTF-8"
作为参数,当然也可以接受
- HttpServletRequest
作为参数。此处的
- HttpServletResponse
用在返回值前。 ⑤ 演示接受路径参数,并在方法参数前结合
- @ResponseBody
使用,访问路径为
- @PathVariable
。 ⑥ 演示常规的
- /anno/pathvar/xxx
参数获取,访问路径为
- request
。 ⑦ 演示解释参数到对象,访问路径为
- /anno/requestParam?id=1
。 ⑧
- /anno/obj?id=1&name=xx
也可以用在方法上。 ⑨ 演示映射不同的路径到相同的方法,访问路径为
- @ResponseBody
或
- /anno/name1
。
- /anno/name2
- package org.light4j.springMvc4.web;
- import org.light4j.springMvc4.domain.DemoObj;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- @RestController // ①
- @RequestMapping("/rest") public class DemoRestController {
- @RequestMapping(value = "/getjson", produces = {
- "application/json;charset=UTF-8"
- }) // ②
- public DemoObj getjson(DemoObj obj) {
- return new DemoObj(obj.getId() + 1, obj.getName() + "yy"); //③
- }@RequestMapping(value = "/getxml", produces = {
- "application/xml;charset=UTF-8"
- }) //④
- public DemoObj getxml(DemoObj obj) {
- return new DemoObj(obj.getId() + 1, obj.getName() + "yy");
- }
- }
① 使用
,声明是控制器,并且返回数据时不需要
- @RestController
。 ② 返回数据的媒体类型为
- @ResponseBody
。 ③ 直接返回对象,对象会自动转换成
- json
。
- json
④ 返回数据的媒体类型为。 ⑤ 直接返回对象,对象会自动转换为
- xml
。
- xml
返回json运行结果如下图所示:
返回xml运行结果如下图所示:
打赏 欢迎关注人生设计师的微信公众账号地址:点击查看
- github
码云地址:点击查看
来源: https://juejin.im/entry/5a00f96cf265da431c6fb449