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;
} }
测试:
SpringBoot 2.x (2):请求和传参的更多相关文章
- vue 使用 axios 时 post 请求方法传参无法发送至后台
axios 时 post 请求方法传参无法发送至后台报错如下 Response to preflight request doesn't pass access control check: No ' ...
- scrapy处理post请求的传参和日志等级
一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. - 日志信息的种类: ERROR : 一般错误 ...
- http请求与传参
这并不算是文章,暂时只做粗略地记录,以免忘记,因此会显得杂乱无章,随便抓了几个包和对postman截图,日后有空再完善 1.get方式 只有一种方式,那就是在url后面跟参数 2.post方式 1)表 ...
- [2019/05/17]解决springboot测试List接口时JSON传参异常
报错信息,大致如下 c.c.c.c.a.BaseControllerExceptionHandler : 运行时异常: java.lang.IllegalStateException: No prim ...
- SpringMVC前后端分离交互传参详细教程
温故而知新,本文为一时兴起写出,如有错误还请指正 本文后台基于SpringBoot2.5.6编写,前端基于Vue2 + axios和微信小程序JS版分别编写进行联调测试,用于理解前后端分离式开发的交互 ...
- vue axios传参报错的解决方法
今天有人问同一套后台系统为什么jquery可以正常使用,axios却报错呢,下面总结如下: 总的来说是jquery和axios传参类型不同,那为什么jquery和axios请求时传参类型不同? 1)j ...
- SpringBoot 处理 POST Json 传参枚举
在 Spring 框架中对枚举类型的序列化/反序列化是有限制的. 假设如下面这样在某些情况下就不能正常工作: 123456789 public enum PayChannelEnum implemen ...
- EasyUI queryParams属性 在请求远程数据同时给action方法传参
http://www.cnblogs.com/iack/p/3530500.html?utm_source=tuicool EasyUI queryParams属性 在请求远程数据同时给action方 ...
- WebApi接口传参不再困惑(4):传参详解 一、get请求 二、post请求 三、put请求 四、delete请求 五、总结
前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方式方法,算是一个笔记,也希望能帮初学者少走弯路.本 ...
随机推荐
- 嵌入式开发之davinci--- 8148 小站信息
http://zhan.renren.com/tag?value=dm8148#!//more/3602888498051423017 http://zhan.renren.com/dm8148evm ...
- /etc/profile与/etc/bashrc、交互式与非交互式、login与non-login shell的差别
线上的memcached又挂了.仍然没有得到core文件. 排查原因,同事发现启动memcached的脚本存在可疑问题. 问题一:没有设置memcached工作文件夹,有可能core dump时没有工 ...
- Library Project里面使用Case语句判断R.id值报错。case expressions must be constant expressions
原文地址:http://blog.csdn.net/wchinaw/article/details/7325641 在一般的Android项目里R里面的资源声明看起来是这样的: public stat ...
- apt-pkg
1 什么是apt-pkg python的apt库,可以做apt可以做的任何事情. 2 apt_pkg.parse_depends(depends, strip_multiarch=True) 这里的d ...
- Struts 1 Struts 2
Key Technologies Primer https://struts.apache.org/primer.html Threads With Struts 1 you were require ...
- Koa2学习(四)POST请求
Koa2学习(四)POST请求 接受请求 POST请求的数据实体,会根据数据量的大小进行分包传送. 当node.js后台收到post请求时,会以buffer的形式将数据缓存起来.Koa2中通过ctx. ...
- Lightoj 1003 - Drunk(拓扑排序)
One of my friends is always drunk. So, sometimes I get a bit confused whether he is drunk or not. So ...
- YTU 2852: 二分查找
2852: 二分查找 时间限制: 1 Sec 内存限制: 128 MB 提交: 215 解决: 79 题目描述 输入不多于20个升序排列的整数,以及一个待查找的数key,输出key在序列中的位置( ...
- [Tjoi2016&Heoi2016] 树
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4551 [算法] 树链剖分 时间复杂度 : O(QlogN) [代码] #includ ...
- 【189】◀▶ PowerShell 系统学习
参考网站如下: PowerShell 中文博客 PowerShell 博客——叹为观止 Mater-PowerShell 通过 PowerShell 编写脚本 Power ...