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数据格式,
输出在页面上,而不会再返回视图。