spring基础---->请求与响应的参数(一)
这里面我们主要介绍一下spring中关于请求和响应参数数据的问题。爱,从来就是一件千回百转的事。不曾被离弃,不曾受伤害,怎懂得爱人?爱,原来是一种经历。
spring中的请求与响应
一、spring中json格式的post请求
客户端发送json格式的数据,例如以下的user对象的信息是我们要插入到数据库中的。
{
"userId": "huhx1",
"username": "linux1",
"passowrd": "pwd11",
"sex": "",
"phoneNumber": "",
"address": "wuhan1",
"birthday": "2017-12-12"
}
我们的controller处理方法中的参数可以用Bean接收,也可以使用Map。如下:
@PostMapping("user3")
public ResponseBean<User> insertUser(@RequestBody User user) {
logger.info("user = {}", user);
userMapper.insertUser(user);
return ResultUtil.success(user);
}
@PostMapping("user4")
public ResponseBean<Map<String, Object>> insertUser(@RequestBody Map<String, Object> user) {
logger.info("map = {}", user);
userMapper.insertMapUser(user);
return ResultUtil.success(user);
}
需要注意的是参数必须要用@RequestBody注解,否则请求的参数是不能正确的注入到参数的类中。关于这个注解和@ResponseBody差不多的功能,就是可以将我们的请求或者响应的数据通过HttpMessageConverters类转换成我们想要的类型(被注解的类型)。官方文档说明如下:
、@RequestBody annotated parameters for access to the HTTP request body. Parameter values are converted to the declared method argument type using HttpMessageConverters. 、If the method is annotated with @ResponseBody, the return type is written to the response HTTP body. The return value will be converted to the declared method argument type using HttpMessageConverters. 、@RestController is a stereotype annotation that combines @ResponseBody and @Controller.
对于json格式的传递参数,使用@RequestParam也无法正确传递参数。例如像下面的这种:
请求的json数据如下:
{
"type": "file",
"content": "huhx.txt"
}
下面是我们的java代码
@PostMapping("javasql")
public String generateJavaBean2(@RequestParam String type, @RequestParam String content) {}
而且对于这种有两个参数的话,使用@RequestBoby注解两个参数的话,也会报错的。
Required request body is missing: public java.lang.String com.linux.huhx.generate.db.MysqlBeanAction.generateJavaBean2(java.lang.String,java.lang.String) throws java.io.IOException
正确的做法应该如下:
public String generateJavaBean2(@RequestBody Map<String, String> map) throws IOException {
String type = map.get("type");
String content = map.get("content");
}
二、spring中表单格式的post请求
如果是表单形式的post请求,那么不需要@RequestBody注解。直接在controller对应方法的参数中注明该类就可以,在postman中如果birthday输入的是2017-12-12。会报string不能转换成date的错,这里面如果一定要支持2018-12-12字符串格式的时间传递,可以使用spring自定义的converter或者formatter接口的实现类。具体可以参考博客:

上述测试的java代码
@PostMapping("user3")
public ResponseBean<User> insertUser(User user) {
logger.info("user = {}", user);
userMapper.insertUser(user);
return ResultUtil.success(user);
}
在使用JSON.toJSONString(this);格式化对象控制台中输出的结果如下:
user = {"birthday":,"password":"","phoneNumber":"","sex":,"userId":"huhx3","username":"huhx3"}
我们返回的数据都是json格式的,这是因为我们在注解控制器的时候用的是@RestController注解。上述也提到过了,它是@Controller和@ResponseBody的复合注解。可以在它的源码中找到:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
String value() default "";
}
三、spring中表单的get请求
- get传递参数的方式,我们的java代码如下:
@GetMapping("getRequest1")
public ResponseBean<String> getRequest1(String username) {
logger.info("username = {}", username);
return ResultUtil.success(username);
}
我们通过postman发送get请求,url为:localhost:9998/mapper/getRequest1?username=huhx。返回的结果如下:
{
"returnCode": ,
"returnMessage": "成功",
"response": "huhx"
}
可以看到成功的接收到了get的请求参数,当然也可以使用@RequestParam修改参数的名称。如下:
@GetMapping("getRequest1")
public ResponseBean<String> getRequest1(@RequestParam("username") String name) {
logger.info("username = {}", name);
return ResultUtil.success(name);
}
- get请求路径上的参数
@GetMapping("getRequest2/{username}")
public ResponseBean<String> getRequest2(@PathVariable("username") String name) {
logger.info("username = {}", name);
return ResultUtil.success(name);
}
如果像上述url参数的那样,省略@PathVariable注解,使用下面的这种方式将会失效得不到传递的参数。
@GetMapping("getRequest2/{username}")
public ResponseBean<String> getRequest2(String username) {
logger.info("username = {}", username);
return ResultUtil.success(username);
}
友情链接
spring基础---->请求与响应的参数(一)的更多相关文章
- struts2基础——请求与响应、获取web资源
一.请求与响应 Action1.含义:(1) struts.xml 中的 action 元素,也指 from 表单的 action 属性,总之代表一个 struts2 请求.(2) 用于处理 Stru ...
- SpringMVC04 很杂很重要(注解,乱码处理,通配符,域属性调用,校正参数名称,访问路径,请求、响应携带参数,请求方法)
1.导入架包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3 ...
- Spring 处理请求和响应相关的注解
@Controller 默认返回 templates 目录下的 string.html 页面内容. 在方法中加上 @ResponseBody 注解,可以返回JSON.XML或自定义mediaType的 ...
- HeadFirst Jsp 04 (请求和响应作为servlet)
servlet 的存在就是为了客服服务, servlet的任务是得到一个客户的请求, 再发回一个响应. 由上图可知, web 容器会在启动后就加载所有的servlet类, 并为之创建实例和初始化 注意 ...
- Spring Boot 2.x基础教程:如何扩展XML格式的请求和响应
在之前的所有Spring Boot教程中,我们都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式 ...
- Spring Boot中如何扩展XML请求和响应的支持
在之前的所有Spring Boot教程中,我们都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式 ...
- Spring Boot中扩展XML请求和响应的支持
在Spring Boot中,我们大多时候都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式返回一 ...
- 2.(基础)tornado的请求与响应
之前我们介绍了tornado 的基础流程,但是还遗留了一些问题,今天我们就来解决这些遗留问题并学习新的内容 settings,使用tornado.web.Application(handler, ** ...
- Spring Cloud Gateway修改请求和响应body的内容
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
随机推荐
- adv7180驱动
http://download.csdn.net/download/u013308744/9945184 http://www.ebaina.com/bbs/thread-10121-1-1.html ...
- Ubuntu -- 安装、卸载程序的命令
通过sudo apt-get install xxxx 安装软件后,总是无法卸载干净,这里以Apache 为例,提供方法:首先sudo apt-get remove apache2再sudo apt- ...
- 监听输入框值变化的最佳方案 oninput 和 onpropertychange (实时监控文本框改变的最佳方案)
公司有个文本框,当输入文字/粘贴/复制 或者是键盘猛按的时候,都希望这个文本框能统计出 输入了多少字 这种用 onchange onkeyup onkepress 都不怎么好使 最后在 ...
- ELK+Redis 解析Nginx日志
一.ELK简介 Elk是指logstash,elasticsearch,kibana三件套,我们一般使用它们做日志分析. ELK工作原理图: 简单来讲ELK具体的工作流程就是客户端的logstash ...
- HTTP 错误 500.19 配置文件错误 ( 0x8007000d,0x80070032)
HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效. 详细错误信息模块 IIS Web Core 通知 未知 处理程序 尚未确定 ...
- 聊一聊PV和并发、以及计算web服务器的数量的方法
聊一聊PV和并发.以及计算web服务器的数量的方法 http://www.chinaz.com/web/2016/0817/567752.shtml 最近和几个朋友,聊到并发和服务器的压力问题.很多朋 ...
- redis集群【转】
一.环境 系统 CentOS7.0 64位最小化安装 redis1 172.16.1.46 6379,6380 redis2 172.16.1.47 6379,6380 ...
- linux 下启动tomca慢问题
编辑文件vim /etc/profile 后面加入一句:export JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom" 设置立 ...
- 使用nginx反向代理解决前端跨域问题
1. 首先去Nginx官网下载一个最新版本的Nginx,下载地址:http://nginx.org/en/download.html.我这里下载的版本是:nginx/Windows-1.12.0.下载 ...
- PHP和Apache结合 Apache默认虚拟主机