@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;
}
}