欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-12 18:18:02
其实请求和传参这些知识属于SpringMVC 不过这也属于必须掌握的知识,巩固基础吧 GET请求: 以第一篇文章自动的方式创建SpringBoot项目: 然后新建Controller: 测试: 另一种写法: 测试: 成功!但是,如果我非要POST访问,结果:显示方法不允许 这个Demo中:需要传递的 ......

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

测试:

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

 

另一种写法:

    /**
     * 测试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;
    }

测试:

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

 

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

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

 

这个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;
    }

测试:

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

 

传参如果是一个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;
    }

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

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

 

获取http头信息:

    @getmapping("/get_user_agent")
    public object getuseragent(@requestheader("user-agent")string useragent) {
        params.clear();
        params.put("useragent",useragent);
        return params;
    }

测试:

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

 

虽然我只是用了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;
    }

}

 

测试:

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