其实请求和传参这些知识属于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):请求和传参的更多相关文章

  1. vue 使用 axios 时 post 请求方法传参无法发送至后台

    axios 时 post 请求方法传参无法发送至后台报错如下 Response to preflight request doesn't pass access control check: No ' ...

  2. scrapy处理post请求的传参和日志等级

    一.Scrapy的日志等级 - 在使用scrapy crawl spiderFileName运行程序时,在终端里打印输出的就是scrapy的日志信息. - 日志信息的种类: ERROR : 一般错误 ...

  3. http请求与传参

    这并不算是文章,暂时只做粗略地记录,以免忘记,因此会显得杂乱无章,随便抓了几个包和对postman截图,日后有空再完善 1.get方式 只有一种方式,那就是在url后面跟参数 2.post方式 1)表 ...

  4. [2019/05/17]解决springboot测试List接口时JSON传参异常

    报错信息,大致如下 c.c.c.c.a.BaseControllerExceptionHandler : 运行时异常: java.lang.IllegalStateException: No prim ...

  5. SpringMVC前后端分离交互传参详细教程

    温故而知新,本文为一时兴起写出,如有错误还请指正 本文后台基于SpringBoot2.5.6编写,前端基于Vue2 + axios和微信小程序JS版分别编写进行联调测试,用于理解前后端分离式开发的交互 ...

  6. vue axios传参报错的解决方法

    今天有人问同一套后台系统为什么jquery可以正常使用,axios却报错呢,下面总结如下: 总的来说是jquery和axios传参类型不同,那为什么jquery和axios请求时传参类型不同? 1)j ...

  7. SpringBoot 处理 POST Json 传参枚举

    在 Spring 框架中对枚举类型的序列化/反序列化是有限制的. 假设如下面这样在某些情况下就不能正常工作: 123456789 public enum PayChannelEnum implemen ...

  8. EasyUI queryParams属性 在请求远程数据同时给action方法传参

    http://www.cnblogs.com/iack/p/3530500.html?utm_source=tuicool EasyUI queryParams属性 在请求远程数据同时给action方 ...

  9. WebApi接口传参不再困惑(4):传参详解 一、get请求 二、post请求 三、put请求 四、delete请求 五、总结

    前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方式方法,算是一个笔记,也希望能帮初学者少走弯路.本 ...

随机推荐

  1. android之检測是否有网络

    主要是用来检測是否有网络,假设没有,就去wifi里面去进行设置网络... 以下贴一下主要代码: private void checkNetWorkInfo() { if (!Tools.isNetwo ...

  2. pip 安装速度慢解决办法

    https://blog.csdn.net/liujingclan/article/details/50176597 https://blog.csdn.net/rytyy/article/detai ...

  3. C语言进入界面编程准备篇

    Win视窗编程和DOS下编程不同,但是类似.Windows应用程序也有它的入口函数,DOS程序中的入口函数是main函数,Windows程序的入口函数是WinMain函数.新建Win32 Applic ...

  4. mysql17---增量备份

    mysql增量备份: 全备份是: (增量备份一定要看日志的时间和位置节点) mysql数据库会以二进制的形式,把用户对mysql数据库的操作记录到文件中,不用使用定时器了.当用户希望恢复的时候,可以使 ...

  5. 深入分析linux调度机制

    一.说明 本文以linux-2.4.10 为例主要分析Linux 进程调度模块中的schedule 函数及其相关的函数.另外相关的前提知识也会说明.默认系统平台是自己的i386 架构的pc. 二.前提 ...

  6. CentOS 7.2 源码安装Python3.6

    1.环境 安装CentOS 7.2最小系统(CentOS-7-x86_64-Minimal-1511.iso) 2.需求 Python-3.6.4.tar.xz(官网下载) GCC(yum安装) 一堆 ...

  7. java修改linux文件

    package vedio.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fil ...

  8. mongoDB 安全权限访问控制

    MongoDB3.0权限 https://blog.csdn.net/leonzhouwei/article/details/46564141 转自:http://ibruce.info/2015/0 ...

  9. Gym 100962J Jimi Hendrix (树形DP)

    题意:给定一棵树,然后每条边有一个字母,然后给定一行字符串,问你能不能从这棵树上找到,并输出两个端点. 析:树形DP,先进行递归到叶子结点,然后再回溯,在回溯的时候要四个值,一个是正着匹配的长度和端点 ...

  10. 【WIP】gollum

    创建: 2018/03/18 [任务表]TODO 这个博客从来不点发布到首页, 完全100%自用, 全部详细完整的干货.千辛万苦找到这里看到一片空白, 是不是很愤怒? 那就对啦233333