您的位置:首页 > 编程语言 > Java开发

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两个注解。

 示例:

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");
}

}


 
测试输出如下:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息