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