其实请求和传参这些知识属于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. AIX下RAC搭建 Oracle10G(五)安装oracle、建立监听

    AIX下RAC搭建系列 AIX下RAC搭建 Oracle10G(五)安装oracle.建立监听 环境 节点 节点1 节点2 小机型号 IBM P-series 630 IBM P-series 630 ...

  2. Java 文件路径的读取

    记得在操作系统中了解到文件读取有两种方式,当然这在各编程语言中也是通用的,所以java路径也分,相对和绝对路径. 绝对路径 绝对路径URI ,听着和URL非常相似.那我们就来看看吧. URI(Unif ...

  3. Oracle imp exp命令具体解释

    怎样在oracle中导入dmp数据库文件? oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令能够把数据从远程数据库server导出到本地的dmp文件,imp命令能够 ...

  4. oracle 12c的数据库导进 11g

    从oracle 12c 备份(expdp)出来的包,还原到11g里,想想都知道会有兼容性问题. 果不其然,报错了: ORA-39142: 版本号 4.1 (在转储文件 "叉叉叉.expdp& ...

  5. hashable

    Glossary — Python 3.6.5 documentation https://docs.python.org/3/glossary.html?highlight=equal hashab ...

  6. wpa_supplicant - 强有力的终端 wifi 配置工具【转】

    本文转载自:http://rickgray.me/2015/08/03/useful-command-tool-for-wifi-connection.html 最近网购了一套Raspberry-Pi ...

  7. 并不对劲的bzoj2820:p2257:YY的GCD

    题目大意 \(t\)(\(t\leq10^4\))组数据,给定\(n,m\)(\(n,m\leq10^6\))求 \[\sum_{x=1}^{n}\sum_{y=1}^{m}[gcd(x,y)=1]\ ...

  8. CodeForces-451E:Devu and Flowers (母函数+组合数+Lucas定理)

    Devu wants to decorate his garden with flowers. He has purchased n boxes, where the i-th box contain ...

  9. 进程、轻量级进程(LWP)、线程

    进程.轻量级进程(LWP).线程 进程:程序执行体,有生命期,用来分配资源的实体 线程:分配CPU的实体. 用户空间实现,一个线程阻塞,所有都阻塞. 内核实现,不会所用相关线程都阻塞.用LWP实现,用 ...

  10. hdu 5289(单调队列)

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...