@Controller与@RestController的区别

@Controller与@RestController的区别

在解释前,先理解一下@RequestMapping与@ResponseBody这两个注解:
@ResponseBody表示该方法返回的结果直接写入HTTP response body中,一般在异步获取数据时使用【ajax】;
@RequestMapping注解会把返回值解析为跳转路径,但是加上@ResponseBody后返回的结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如获取json数据,加上@ResponseBody后,会直接返回json数据串。

区别:

@Controller对应的方法上,视图解析器可以解析return的jsp、html页面,并且跳转到相应页面;如果要返回json等内容到页面,则需加上@ResponseBody注解。
如下:


    @Controller
    public class FileUploadController {
    //跳转到上传文件的页面
    @RequestMapping(value="/gouploadimg", method = RequestMethod.GET)
    public String goUploadImg() {
    return "uploadimg"; //跳转到 templates 目录下的 uploadimg.html
    }
    //处理文件上传
    @RequestMapping(value="/upload", method = RequestMethod.POST)
    public @ResponseBody String uploadImg(@RequestParam("file") MultipartFile file,
    HttpServletRequest request) {
    String contentType = file.getContentType();
    String fileName = file.getOriginalFilename();
    ..
    String msg = "上传成功!”;
    return msg;

@RestController注解相当于@Controller与@ResponseBody两个注解的结合,返回的是json数据,也不需要在方法前面加@ResponseBody。但是使用此注解,就不能返回jsp、html页面,视图解析器无法解析jsp、html页面。
如下:

@RestController
public class UserController {

	@Autowired
	UserServiceImpl userService;
	
	@RequestMapping(value="/findUser", method = RequestMethod.GET)
	public User findUser(){
		User user = userService.findUser();
		return user;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43714266/article/details/87932149