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接口传参的一些方式方法,算是一个笔记,也希望能帮初学者少走弯路.本 ...
随机推荐
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- SGU - 186 - The Chain (贪心)
186. The Chain time limit per test: 0.25 sec. memory limit per test: 4096 KB input: standard input o ...
- oracle技术总结
http://www.cnblogs.com/jimeper/ http://blog.csdn.net/dragonxiangfu http://www.boobooke.com/bbs/threa ...
- JS日历控件 灵活设置: 精确的时分秒.
在今年7月份时候 写了一篇关于 "JS日历控件" 的文章 , 当时仅仅支持 年月日 的日历控件,如今优化例如以下: 1. 在原基础上 支持 yyyy-mm-dd 的年月 ...
- python学习第一
#python学习day1#一.变量#变量命名规范:#驼峰命名法:AgeOfPlane#下划线命名(推荐):age_of_plane#变量格式同C/C++#注意:变量不以中文命名:变量不宜过长:变量因 ...
- 嵌入式开发之davinci--- 8168 电源调试总结
http://www.61ic.com/Article/DaVinci/TMS320DM81x/201403/51863.html
- IDEA debug调式快捷键
F9 resume programe 恢复程序 Alt+F10 show execution point 显示执行断点 F8 Step Over 相当于eclipse的f6 跳到下一步 F7 Step ...
- iOS开发——高级篇——多线程dispatch_apply
我们知道遍历数组是一个相对耗时的操作,而同时手机的核是越来越多,所以我们需要充分利用iOS多核的作用. 特别是在遍历操作中还有其他耗时操作.像我们平时直接遍历数组的操作 ,i< ,i++){ / ...
- jQuery简单纯文字提示条
如何制作jQuery简单纯文字提示条,先介绍提示条(tooltip)的意思是用户鼠标悬停经过事件发生提示title.它们已经呈现在大多数浏览器中,当你可以提供一个链接或图片的title属性,就是用户将 ...
- 动态点分治入门 ZJOI2007 捉迷藏
传送门 这道题好神奇啊……如果要是不带修改的话那就是普通的点分治了,每次维护子树中距离次大值和最大值去更新. 不过这题要修改,而且还改500000次,总不能每改一次都点分治一次吧. 所以我们来认识一个 ...