Spring 關於ResponseBody注解的作用
responseBody一般是作用在方法上的,加上該注解表示該方法的返回結果直接寫到Http response Body中,常用在ajax異步請求中,
在RequestMapping中 return返回值默認解析為跳轉路徑,如果你此時想讓Controller返回一個字符串或者對象到前台 就會報404 not response的錯誤。
當加上@ResponseBody注解后不會解析成跳轉地址 會解析成相應的json格式的對象 集合 字符串或者xml等直接返回給前台 可以通過 ajax 的“success”:fucntion(data){} data直接獲取到。
下面是返回json格式的字符串
@RequestMapping("/register") @ResponseBody public String register(TestUserInfo testUserInfo,String username) throws Exception{ if(testUserService.findByUserName(username)==null){ testUserService.addTestUser(testUserInfo); return "success"; }else{ return "fail"; } }
下面是頁面跳轉
@RequestMapping("/upload/condition") public String search(Model model) { List<ArchiveCategory> allArchiveCategory = archiveCategoryApi.getAllCategories(); List<ArchiveCategory> topLevelCategory = allArchiveCategory.stream().filter(category -> category.getParentid() == 0 || "視頻".equals(category.getName())).collect(Collectors.toList()); model.addAttribute("archiveCategories", topLevelCategory); return "beike/upload-pop-condition"; }
注冊驗證: 希望返回給前台 一個json字符串 來表示 注冊是否成功 而不是 跳轉路徑 所以此處 方法 加上 @ResponseBody注解 避免被解析成跳轉路徑
@ResponseBody,一般是使用在單獨的方法上的,需要哪個方法返回json數據格式,就在哪個方法上使用,具有針對性。
@RestController,一般是使用在類上的,它表示的意思其實就是結合了@Controller和@ResponseBody兩個注解,
如果哪個類下的所有方法需要返回json數據格式的,就在哪個類上使用該注解,具有統一性;需要注意的是,使用了@RestController
注解之后,其本質相當於在該類的所有方法上都統一使用了@ResponseBody注解,所以該類下的所有方法都會返回json數據格式,
輸出在頁面上,而不會再返回視圖。