@ResponseBody和@RestController

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数据格式,

输出在页面上,而不会再返回视图。

posted @ 2019-10-17 16:39  快速突围  阅读(2708)  评论(0编辑  收藏  举报