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; } }
测试:
另一种写法:
/** * 测试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; } }
测试:
上一篇: php自动加载的两种实现方法