• @RestController和@Controller区别


    @RestController和@Controller区别

    @RestController注解相当于@ResponseBody + @Controller合在一起的作用。
    RestController使用的效果是将方法返回的对象直接在浏览器上展示成json格式,而如果单单使用@Controller会报错,需要ResponseBody配合使用。
    1、如果只是使用@RestController注解Controller类,则方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
    例如:本来应该到success.jsp页面的,则其显示success.
    2、如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
    3、如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

    假定一个user对象,对象有很多属性(name,sex,age,birth,address,tel)
    在我的了解中,这二者的区分为:@restcontroller为@controller和@responsebody的结合
    在@controller注解中,返回的是字符串,或者是字符串匹配的模板名称,即直接渲染视图,与html页面配合使用的,
    在这种情况下,前后端的配合要求比较高,java后端的代码要结合html的情况进行渲染,使用model对象(或者modelandview)的数据将填充user视图中的相关属性,然后展示到浏览器,这个过程也可以称为渲染;

    @Controller
    @GetMapping("/")
        public String getuser(Model model) throws IOException {
    
            model.addAttribute("name",bob);
            model.addAttribute("sex",boy);
            return "user";//user是模板名
        }
    

    对应视图user.html中的html代码

    <html xmlns:th="http://www.thymeleaf.org">
    <body>
        <div>
            <p th:text="${name}></p>
            <p th:text="${sex}></p>
        </div>
    </body>
    </html>
    

    而在@restcontroller中,返回的应该是一个对象,即return一个user对象,这时,在没有页面的情况下,也能看到返回的是一个user对象对应的json字符串,而前端的作用是利用返回的json进行解析渲染页面,java后端的代码比较自由。

    @RestController
    @GetMapping("/")
        public User getuser( ) throws IOException {
            User bob=new User();
            bob.setName("bob");
            bob.setSex("boy");
            return bob;
        }
    

    访问网址得到的是json字符串{“name”:”bob”,”sex”:”boy”},前端页面只需要处理这个字符串即可。

    请求入口Controller部分提供三种接口样例:视图模板,Json,restful风格

    (1)视图模板
    返回结果为视图文件路径。视图相关文件默认放置在路径 resource/templates下:

    @Controller
    public class HelloController {
        private Logger logger = Logger.getLogger(HelloController.class);
        /*
        *   http://localhost:8080/hello?name=cn.7player
         */
     
        @RequestMapping("/hello")
        public String greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) {
            logger.info("hello");
            model.addAttribute("name", name);
            return "hello";
        }
    }
    

    (2)Json
    返回Json格式数据,多用于Ajax请求。

    @Controller
    public class UserController {
        private Logger logger = Logger.getLogger(UserController.class);
    
        @Autowired
        private UserService userService;
        /*
         *  http://localhost:8080/getUserInfo
         */
     
        @RequestMapping("/getUserInfo")
        @ResponseBody
        public User getUserInfo() {
            User user = userService.getUserInfo();
            if(user!=null){
                System.out.println("user.getName():"+user.getName());
                logger.info("user.getAge():"+user.getAge());
            }
            return user;
        }
    }
    

    (3)restful
    REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。

    @RestController
    @RequestMapping(value="/users")
    public class SwaggerController {
        
        /*
         *  http://localhost:8080/swagger/index.html
         */
        @ApiOperation(value="Get all users",notes="requires noting")
        @RequestMapping(method=RequestMethod.GET)
        public List<User> getUsers(){
            List<User> list=new ArrayList<User>();
     
            User user=new User();
            user.setName("hello");
            list.add(user);
     
            User user2=new User();
            user.setName("world");
            list.add(user2);
            return list;
        }
     
        @ApiOperation(value="Get user with id",notes="requires the id of user")
        @RequestMapping(value="/{name}",method=RequestMethod.GET)
        public User getUserById(@PathVariable String name){
            User user=new User();
            user.setName("hello world");
            return user;
        }
    }
    

    文章转载自:https://www.jianshu.com/p/b534b394dc7a

  • 相关阅读:
    第九届蓝桥杯JavaA组省赛真题
    Qt的IDE开发环境(KDevelop,MonKey Studio,QDevlop,Dev-cpp,Cobras,Edyuk)
    Eclipse+Qt开发环境设置(Linux和Win)
    Visual Studio 2005安装qt-win-commercial-src-4.3.1,并设置环境变量
    在VC6.0中编译头文件时产生moc文件
    Qt配置信息设置(QSettings在不同平台下的使用路径)
    应对业务需求变化?
    开发环境准备:Ruby on Rails开发环境配置
    VS2013中Python学习环境搭建
    JQUERY 插件开发——MENU(导航菜单)
  • 原文地址:https://www.cnblogs.com/XING-ZHI-JI-DA-XUE/p/14511228.html
Copyright © 2020-2023  润新知