其实请求和传参这些知识属于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. JavaSE----API之集合(Collection、List及其子类、Set及其子类、JDK1.5新特性)

    5.集合类 集合类的由来: 对象用于封装特有数据,对象多了须要存储:假设对象的个数不确定.就使用集合容器进行存储. 集合容器由于内部的数据结构不同,有多种详细容器.不断的向上抽取,就形成了集合框架. ...

  2. UVA 1400 1400 - &quot;Ray, Pass me the dishes!&quot;(线段树)

    UVA 1400 - "Ray, Pass me the dishes!" option=com_onlinejudge&Itemid=8&page=show_pr ...

  3. SVN下Update出现代码文件删除状态问题

    有时候在SVN上更新了代码,发觉别人提交的东西,服务上明明就是有,但本机却空空如也.只好打开 "Repo-browser",从服务器上强拉下来.结果图标显示红叉,显示为删除状态. ...

  4. 2016/04/26 权限 数据库mydb2 五个表 分别是 1,用户 2,角色 3,权限 4,用户对应的角色 5,角色对应的权限

    权限:   1,后台分配角色     角色对应权限    2,各用户通过登录页面登录    查看到各自的权限 五个页面   加引入一个jquery-1.11.2.min.js 1,guanli.php ...

  5. 将前端js异步调用的多个服务合并为一个前端服务

    将前端js异步调用的多个服务合并为一个前端服务 1. 减少前端js异步请求的次数改善浏览体验 2. 方便地针对单个接口做异常降级处理

  6. windows安装SVN服务器并设置开机启动

    1.安装SVN服务器,到http://subversion.apache.org/packages.html上下载windows版的SVN,并安装,在命令行下运行svn命令,如下所以,则svn服务器安 ...

  7. 建立自己的私有docker(ssl&login auth)

    建立私有docker需要先建立ssl证书,然后建立htpass的登陆证书 最后使用nginx配置docker-compose.yml 参考: https://www.digitalocean.com/ ...

  8. UVA11183 Teen Girl Squad —— 最小树形图

    题目链接:https://vjudge.net/problem/UVA-11183 You are part of a group of n teenage girls armed with cell ...

  9. 小幻美图 API

    『不忘初心,方得始终.』 小幻美图 API 更新:2015.03.29 目前提供的API共有10种! 必应各种今日获取API共4种! 本站收录图片获取API共4种! 网络图片尺寸修改API共1枚! 百 ...

  10. I.MX6 逻辑分析仪 UART

    /*********************************************************************** * I.MX6 逻辑分析仪 UART * 说明: * ...