zoukankan      html  css  js  c++  java
  • SpringBoot 2.x (2):请求和传参

    其实请求和传参这些知识属于SpringMVC

    不过这也属于必须掌握的知识,巩固基础吧

    GET请求:

    以第一篇文章自动的方式创建SpringBoot项目:

    然后新建Controller:

    package org.dreamtech.springboot.controller;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * Get请求
     * 
     * @author Xu Yiqing
     *
     */
    //RestController=ResponseBody+Controller
    @RestController
    public class GetController {
    
        private Map<String, Object> params = new HashMap<String, Object>();
    
        /**
         * 根据Restful协议:参数应该从路径中获取
         * 
         * @return
         */
        @RequestMapping(path = "/{city_id}/{user_id}", method = RequestMethod.GET)
        public Object findUser(@PathVariable("city_id") String cityId, @PathVariable("user_id") String userId) {
            params.clear();
    
            params.put("city_id", cityId);
            params.put("user_id", userId);
    
            return params;
        }
    }

    测试:

    另一种写法:

        /**
         * 测试GetMapping
         * 
         * @param from
         * @param size
         * @return
         */
        @GetMapping("/page_user")
        public Object pageUser(int from, int size) {
            params.clear();
    
            params.put("from", from);
            params.put("size", size);
    
            return params;
        }

    测试:

    成功!但是,如果我非要POST访问,结果:显示方法不允许

    这个Demo中:需要传递的参数是page和size,返回from和size,并且page参数默认值为0

        /**
         * 测试默认属性和参数命名
         * 
         * @param from
         * @param size
         * @return
         */
        @GetMapping("/page_user2")
        public Object pageUser2(@RequestParam(defaultValue = "0", name = "page") int from, int size) {
            params.clear();
    
            params.put("from", from);
            params.put("size", size);
    
            return params;
        }

    测试:

    传参如果是一个Bean(实体类)呢?

    我搞一个实体类:

    package org.dreamtech.springboot.domain;
    
    public class User {
        private String username;
        private String password;
        private Integer age;
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
    }

    如果传的参数是实体类呢?

        /**
         * Bean传参注意使用事项:
         * 1.HTTP请求头的content-type为application/json
         * 2.使用@RequestBody注解
         * @param user
         * @return
         */
        @GetMapping("/save_user")
        public Object saveUser(@RequestBody User user) {
            params.clear();
            params.put("user", user);
            return params;
        }

    测试:注意以下红色框中的设置

    获取HTTP头信息:

        @GetMapping("/get_user_agent")
        public Object getUserAgent(@RequestHeader("User-Agent")String userAgent) {
            params.clear();
            params.put("userAgent",userAgent);
            return params;
        }

    测试:

    虽然我只是用了Get方式作为实例,但是其他的方式都是一致的,只不过使用的注解不一样:

        @PostMapping
        @PutMapping
        @DeleteMapping
        @GetMapping

    不过通常情况下只用GET和POST两种

    GET通常用来查询(Read)

    POST通常用来增j加、删除、修改(Create、Delete、Update)

    注意:只是通常,凡事没有绝对

    最后补充一些知识点:

    RestController返回的是JSON,那么封装JSON的框架有哪些呢?

    阿里的fastjson,谷歌的gson,还有知名的jackson,到底应该选择哪一种呢?

    只从性能上来讲,是jackson>fastjson>gson,不过他们各有优点,这也不能说明太多问题

    SpringBoot中使用的是jackson

    而jackson也有一些注解可以使用:

        @GetMapping("/test_json")
        public Object testJson() {
            return new User("admin", "123", 18, new Date());
        }

    修改一下User实体类:

    package org.dreamtech.springboot.domain;
    
    import java.util.Date;
    
    import com.fasterxml.jackson.annotation.JsonFormat;
    import com.fasterxml.jackson.annotation.JsonIgnore;
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.fasterxml.jackson.annotation.JsonInclude.Include;
    import com.fasterxml.jackson.annotation.JsonProperty;
    
    public class User {
        // 空值不返回
        @JsonInclude(Include.NON_NULL)
        private String username;
    
        // JSON不应该封装password字段
        @JsonIgnore
        private String password;
    
        // 如果希望隐藏字段可以采用这种方法
        @JsonProperty("secret")
        private Integer age;
    
        // 对日期进行格式化显示:2019-05-02 20:22:04
        @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss", locale = "zh", timezone = "GMT+8")
        private Date createTime;
    
        public Date getCreateTime() {
            return createTime;
        }
    
        public void setCreateTime(Date createTime) {
            this.createTime = createTime;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public User(String username, String password, Integer age, Date createTime) {
            super();
            this.username = username;
            this.password = password;
            this.age = age;
            this.createTime = createTime;
        }
    
    }

    测试:

  • 相关阅读:
    TEN
    out.println()、document.write()、document.getelementbyid()
    正则表达式
    DOM与BOM
    伪类和伪元素
    Grid(未完全完成)
    position
    表单
    API,WEB API
    Event Flow
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/10803059.html
Copyright © 2011-2022 走看看