@RestController注解和@Controller注解的区别

在学习的过程中发现这个问题,写篇博客记录一下,方便以后查阅。

@RestController注解是@Controller和@ResponseBody注解的结合。

首先说明:

@Controller注解表明这是一个控制器类

在方法上加注解@ResquestMapping(value = "url", method = RequestMethod.POST)表示拦截以post请求的发送的url地址,如果不写method默认的话会拦截get和post请求

配合InternalResourceViewResolver视图解析器即可以返回页面如:return main跳转到mina.jsp

而不跳转页面,仅需返回JSON数据的话,可配合@ResponseBody注解。

相同的加@RestController注解也表明这是一个控制器类,与上面相同

在方法上加注解@ResquestMapping(value = "url", method = RequestMethod.POST)表示拦截以post请求的发送的url地址,如果不写method默认的话会拦截get和post请求

但是返回如return main则显示的是main而不是跳转到页面了,如果要跳转页面,这是需要用到ModelAndView,ModelAndView model = new ModelAndView();

调用这个类的model.addObject("name",value)方法相当于setAttribute("name",value)方法将value值存储为名name供前台取。

调用这个类的model.setViewName("jsp/main.jsp")即可跳转到jsp夹里的main.jsp页面了。

完整示例:

@Controller

public class MyController{

  @RequestMapping(value = "/hello", method = RequestMethod.GET)

  @ResponseBody

  public String myMethod(){

    return "hello word";

}

}

在地址栏输入localhost:8080/项目名/hello回车,页面将显示hello word

@Controller

public class MyController{

  @RequestMapping(value = "/hello", method = RequestMethod.GET)

  public ModelAndView myMethod(){

    ModelAndView model = new ModelAndView();

    model.setViewName("success");

    return model;

}

}

在地址栏输入localhost:8080/项目名/hello回车,将跳转到success页面

@RestController

public class MyController{

  @RequestMapping(value = "/hello", method = RequestMethod.GET)

  public String myMethod(){

    return "hi";

}

}

在地址栏输入localhost:8080/项目名/hello回车,页面将显示hi

@RestController

public class MyController{

  @RequestMapping(value = "/hello", method = RequestMethod.GET)

  public ModelAndView myMethod(){

    ModelAndView model = new ModelAndView();

    model.setViewName("success");

    return model;

}

}

在地址栏输入localhost:8080/项目名/hello回车,将跳转到success页面

你可能感兴趣的:(Java)