SpringBoot 2.x (2):请求和传参

2019-05-04 09:39:19来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

其实请求和传参这些知识属于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;
    }

}

 

测试:

 


原文链接:https://www.cnblogs.com/xuyiqing/p/10803059.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:java邮件发送工具

下一篇:08 包_继承