SpringBoot7-Spring MVC-简介
2017-07-23 11:07
357 查看
spring mvc常用有以下几个注解:
1,@Controller:
@Controller注解在类上,表明这个类是一个spring mvc里的controller,将其声明为Spring的一个Bean,Dispatcher Servlet会自动扫描注解了此注解的类,并将web请求映射到注解了@RequestMapping的方法上。这里需要指出,在声明普通Bean的时候,使用@Componet,@Service,@Repository和@@Controller等同,因为@Service,@Repository,@Controller都组合了@Compoment元注解:但在spring
mvc声明控制器bean的时候,只能使用@Controller。
2,@RequestMapping:
@RequestMapping注解是用来映射web请求(访问路径和参数),处理类和方法的。@RequestMapping可注解在类或方法上。注解在方法上的@RequestMapping路径会继承注解在类上的路径,@RequestMapping指出Servlet的request和response作为参数,也支持对request和response的媒体类型进行配置。
3,@ResponseBody
@ResponseBody支持将返回值放在response体内,而不是返回一个页面。我们在很多基于Ajax的程序的时候,可以在此注解返回数据而不是页面;此注解可放置在返回值前或者方法上
4,@RequestBody
@RequestBody运行request的参数在request体中,而不是直接连接在地址后面。此注解放置在参数前。
5,@PathVariable
@PathVariable用来接收路径参数,如/news/001,可接收001作为参数,此参数放置在参数前。
6,@RestController
@RestController是一个组合注解,组合了@Controller和@ResponseBody,这就意味着当你只开放一个和页面交互数据的控制器的时候,需要使用此注解。若没有此注解,要想实现该功能需要在代码中加入@Controller和@ResponseBody两个注解。
添加jackson及相关依赖,获得对象和json或者xml之间的转换:
在实际项目中,我们一般主要支持json数据,没必要同时支持json和xml因为json比xml更简洁。由于javascript的广泛使用,json成为最推荐的格式,在这种情况下,我们的依赖如下(上面的依赖包含下面的依赖)
下面的类用来掩饰获取request对象参数和返回此对象到response
package jack.springmvc.domain;
/**
* Created by jack on 2017/7/22.
*/
public class DemoObj {
private Long id;
private String name;
public DemoObj() {
super();
}
public DemoObj(Long id, String name) {
this.id = id;
this.name = name;
}
/**
* jackson对对象和json做转换时一定需要此空构造
* @param l
* @param s
*/
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;
}
@Override
public String toString() {
return "DemoObj{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
2,修改下面访问的路径,修改为“/”如下图:
3,注解演示控制器:
控制器代码如下:
启动tomcat,输入相应的路径和参数可进行测试。
4,@RestController
测试输出如下:
1,@Controller:
@Controller注解在类上,表明这个类是一个spring mvc里的controller,将其声明为Spring的一个Bean,Dispatcher Servlet会自动扫描注解了此注解的类,并将web请求映射到注解了@RequestMapping的方法上。这里需要指出,在声明普通Bean的时候,使用@Componet,@Service,@Repository和@@Controller等同,因为@Service,@Repository,@Controller都组合了@Compoment元注解:但在spring
mvc声明控制器bean的时候,只能使用@Controller。
2,@RequestMapping:
@RequestMapping注解是用来映射web请求(访问路径和参数),处理类和方法的。@RequestMapping可注解在类或方法上。注解在方法上的@RequestMapping路径会继承注解在类上的路径,@RequestMapping指出Servlet的request和response作为参数,也支持对request和response的媒体类型进行配置。
3,@ResponseBody
@ResponseBody支持将返回值放在response体内,而不是返回一个页面。我们在很多基于Ajax的程序的时候,可以在此注解返回数据而不是页面;此注解可放置在返回值前或者方法上
4,@RequestBody
@RequestBody运行request的参数在request体中,而不是直接连接在地址后面。此注解放置在参数前。
5,@PathVariable
@PathVariable用来接收路径参数,如/news/001,可接收001作为参数,此参数放置在参数前。
6,@RestController
@RestController是一个组合注解,组合了@Controller和@ResponseBody,这就意味着当你只开放一个和页面交互数据的控制器的时候,需要使用此注解。若没有此注解,要想实现该功能需要在代码中加入@Controller和@ResponseBody两个注解。
示例:
1,传值添加jackson及相关依赖,获得对象和json或者xml之间的转换:
<!--添加jackson依赖,获得对象和josn或xml之间的转换--> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.8.9</version> </dependency>
在实际项目中,我们一般主要支持json数据,没必要同时支持json和xml因为json比xml更简洁。由于javascript的广泛使用,json成为最推荐的格式,在这种情况下,我们的依赖如下(上面的依赖包含下面的依赖)
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.9</version> </dependency>
下面的类用来掩饰获取request对象参数和返回此对象到response
package jack.springmvc.domain;
/**
* Created by jack on 2017/7/22.
*/
public class DemoObj {
private Long id;
private String name;
public DemoObj() {
super();
}
public DemoObj(Long id, String name) {
this.id = id;
this.name = name;
}
/**
* jackson对对象和json做转换时一定需要此空构造
* @param l
* @param s
*/
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;
}
@Override
public String toString() {
return "DemoObj{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
2,修改下面访问的路径,修改为“/”如下图:
3,注解演示控制器:
控制器代码如下:
package jack.springmvc.controller; import jack.springmvc.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; import javax.servlet.http.HttpServletRequest; /** * Created by jack on 2017/7/22. */ @Controller //@Controller注解此类是一个控制器 @RequestMapping("/anno") //@RequestMapping("/anno") 映射的此类的访问路径是:/anno public class DemoAnnoController { //此方法没有标注路径,因此使用类级别的路径/anno;produces可定制返回的response的媒体类型 //和字符集,或需返回值是json对象,则设置produces = "application/json;charset=UTF-8" @RequestMapping(produces = "text/plain;charset=UTF-8") //使用HttpServletRequest作为参数,此处的@ResponseBody用在返回值前 public @ResponseBody String index(HttpServletRequest request){ return "url:"+request.getRequestURI()+" can access"; } //接收路径参数,并在方法参数前结合@PathVariable使用,访问路径/anno/pathvar/xx @RequestMapping(value = "/pathvar/{str}",produces = "text/plain;charset=UTF-8") public @ResponseBody String demoPathVar(@PathVariable String str,HttpServletRequest request){ return "url:"+request.getRequestURI()+" can access,str:"+str; } //常规request参数获取,访问路径为/anno/requestParam?id=1 @RequestMapping(value = "/requestParam",produces = "text/plain;charset=UTF-8" ) public @ResponseBody String passRequestParam(Long id,HttpServletRequest request){ return "url:"+request.getRequestURI()+" can access,id:"+id; } //演示接收参数到对象,访问路径为/anno/obj?id=1&name=xx,application/json;charset=UTF-8 @RequestMapping(value = "/obj") @ResponseBody //@ResponseBody用在方法上 public String passObj(DemoObj obj,HttpServletRequest request){ return "url:"+request.getRequestURI()+" can access,obj id :"+obj.getId()+" ;obj name :"+obj.getName(); } //不同路径映射到相同的方法上,访问路径为/anno/name1或/anno/name2 @RequestMapping(value = {"name1","name2"},produces = "text/plain;charset=UTF-8") public @ResponseBody String remove(HttpServletRequest request){ return "url:"+request.getRequestURI()+" can access"; } }
启动tomcat,输入相应的路径和参数可进行测试。
4,@RestController
package jack.springmvc.controller; import jack.springmvc.domain.DemoObj; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Created by jack on 2017/7/23. */ //@RestController声明控制器,并且返回数据时不需要@ResponseBody @RestController @RequestMapping("/rest") public class DemoRestController { //设置produces返回json @RequestMapping(value = "getjson",produces = {"application/json;charset=UTF-8"}) public DemoObj getjson(DemoObj obj){ return new DemoObj(obj.getId()+1,obj.getName()+"yy"); } //produces设置返回xml @RequestMapping(value = "getxml",produces = {"application/xml;charset=UTF-8"}) public DemoObj getxml(DemoObj obj){ return new DemoObj(obj.getId(),obj.getName()+"yy"); } }
测试输出如下:
相关文章推荐
- Spring Boot / Spring MVC 入门实践 (二) :MVC与Spring MVC简介
- Spring Boot / Spring MVC 入门实践 (二) :MVC与Spring MVC简介
- 疯狂Spring Cloud连载(3)Spring Boot简介与配置
- 16-SpringBoot——Spring MVC基础-测试
- SpringBoot(四)Spring MVC基础
- 详解Spring Boot下的lombok安装以及使用简介
- spring boot 简介
- 浅析Spring MVC和Spring BOOT之间的简化小秘密
- Spring Boot & Spring MVC 异常处理的N种方法
- Redis简介-安装-Spring-SpringBoot集成教程
- 在spring-boot工程中添加spring mvc拦截器
- Spring---Spring MVC 简介
- Shiro解决无法注入Service问题(包括Spring MVC和Spring Boot)
- spring boot 简介
- Spring Boot 简介(入门篇)
- Spring Boot学习(简介-Hello World)
- spring boot零基础学习 spring boot简介(一)
- spring-boot 简介
- SpringBoot8-Spring MVC-Spring MVC基本配置
- spring boot 学习小结1 spring mvc环境搭建