SpringBoot 2.x (2):请求和传参
2019-05-04 09:39:19来源:博客园 阅读 ()
其实请求和传参这些知识属于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 包_继承
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- 掌握SpringBoot-2.3的容器探针:实战篇 2020-06-11
- nacos~配置中心功能~springboot的支持 2020-06-10
- SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash