• spring学习(二十九)--参数绑定注解


    package springAnnotions;
    
    import java.util.Map;
    import org.springframework.web.bind.annotation.CookieValue;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestHeader;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @RestController注解相当于@ResponseBody + @Controller合在一起的作用。
     * 1) 如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,
     *    或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
     * 2) 如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
     *    如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。
     * @author qiaozhong
     */
    @RestController
    
    /**
     * RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
     * RequestMapping注解有六个属性
     * 1、 value:指定请求的实际地址,指定的地址可以是URI Template 模式;
     *    当之设置value一个属性时,value可以省略不写,当有其他属性时则需要加上进行区分。
     * 2、method: 指定请求的method类型, GET、POST、PUT、DELETE等。
     * 3、consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html。
     * 4、produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。
     * 5、params:指定request中必须包含某些参数值是,才让该方法处理。
     * 6、headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
     * @author qiaozhong
     */
    @RequestMapping(value="/pathVariableAnnotion")
    public class PathVariableAnnotion {
        
        /**
         * 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
         * 使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
         */
        @ResponseBody
        @RequestMapping(value="/getRequestHeader")
        /**
         * @RequestHeader绑定请求头参数到入参
         * value为key,required为是否必须存在,defaultValue为header不存在时候的默认值
         */
        public String getRequestHeader(@RequestHeader(value="Accept-Encoding", required=false, defaultValue="noSession") String encoding, 
                @RequestHeader("host") String host, @RequestHeader("Content-Type") String contentType){
            System.out.println(encoding);
            System.out.println(host);
            System.out.println(contentType);
            return encoding + host + contentType;
        }
        
        
        /**
         * @CookieValue绑定请求头cookie中的JSESSIONID到入参
         * value为key,required为是否必须存在,defaultValue为cookie不存在时候的默认值
         * @param encoding
         * @param host
         * @param contentType
         * @return
         */
        @RequestMapping(value="/getRequestCookie")
    //    @ResponseBody
        public String getRequestCookie(
                @CookieValue(value="JSESSIONID", required=false, defaultValue="noSession") String sessionId){
            System.out.println(sessionId);
            return sessionId;
        }
        
        /**
         * @RequestParam绑定Content-Type:为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST
         * 常用来处理简单类型的绑定,通过Request.getParameter() 获取的String可直接转换为简单类型的情况
         * value为key,required为是否必须存在,defaultValue为key不存在时候的默认值
         * @param id
         * @param name
         * @return
         */
        @RequestMapping(value="/getRequestParam")
    //    @ResponseBody
        public String getRequestParam(@RequestParam int id, 
                @RequestParam(value="name", required=false, defaultValue="littleBall") String name){
            System.out.println(String.valueOf(id) + name);
            return String.valueOf(id) + name;
        }
        
        /**
         * @RequestBody绑定Content-Type不为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST
         * 作用:1、该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;
         * 2、再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。
         * 
         * 使用时机:A) GET、POST方式提时, 根据request header Content-Type的值来判断:
         * application/x-www-form-urlencoded, 可选@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理
         * multipart/form-data, 使用@RequestBody不能处理
         * 其他格式, 其他包括application/json, application/xml等格式,必须使用@RequestBody来处理
         * 
         * B) PUT方式提交时, 根据Content-Type的值来判断:
         * application/x-www-form-urlencoded, 必须用使用@RequestBody来处理
         * multipart/form-data, 不能处理使用@RequestBody来处理
         * 其他格式, 必须使用@RequestBody来处理
         * 
         * 说明:request的body部分的数据编码格式由header部分的Content-Type指定;
         */
        @RequestMapping(value="/getRequestBody", method=RequestMethod.POST)
    //    @ResponseBody
        public String getRequestBody(@RequestBody Map people){
            System.out.println(people.get("sex"));
            System.out.println(people.get("name"));
            return String.valueOf(people.get("sex"))+ String.valueOf(people.get("name"));
        }
    }
    个人理解,如有错误,欢迎指正!
  • 相关阅读:
    [ PyQt入门教程 ] Qt Designer工具的使用
    [ PyQt入门教程 ] PyQt5开发环境搭建和配置
    Notepad++提升工作效率小技巧
    思考:测试人员如何快速成长
    Linux /tmp目录下执行脚本失败提示Permission denied
    使用Quartz实现定时任务
    算法篇(前序)——Java的集合
    深入理解 JVM(上)
    Linux集锦
    秒杀系统实现高并发的优化
  • 原文地址:https://www.cnblogs.com/gllegolas/p/11817251.html
Copyright © 2020-2023  润新知