@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;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章