SpringBoot7-Spring MVC-简介

来源:互联网 发布:c语言 _inline 编辑:程序博客网 时间:2024/06/15 22:27

      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") 映射的此类的访问路径是:/annopublic 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");    }}


  测试输出如下:







原创粉丝点击