
spring boot 中的Controller或者RestController接收参数的方法是一样的。这章目标是对几种常用的传参都写个例子。
创建package: combiboheartdemosapi,这个包里放置API接口的RestController
在combiboheartdemosapi包中创建一个class: ParamController。这章的示例都在这个类中进行。
路径中包含参数,这种情况适合与传递一个不能为空值的参数。比如有些应用中,查询某个企业的数据,必须包含企业的编号,就可以在地址里接收这个编号。
在ParamController中增加一个函数PathParam
路径中的参数通过{sn}接收值。
使用名称接收参数比较直观,我用得比较多。不用注解。跟客户端传的参数同名就可以接收到。如下例子中的reqParam
也可以用get传参
上面用参数名称接收值,只要与请求时的名称一致就能接收到参数值。如果需要传递的参数比较多的时候,就不适合一个一个参数写在函数里了,那样很不方便,也容易出错。可以把这些参数写到一个对象里接收。如下例子
创建一个package: combiboheartdemosmodel,创建一个类Person
用Person对象接收参数
虽然这样的方式也能接收get传参,但是因为需要传的参数多了,用get显得不太方便。这里就不测试GET方式请求了。
有的时候,需要接收JSON传参。比如某些服务的调用需要开发一个回调函数接收对方的回调并获得参数值为结果,对方回调回来的值是JSON格式的值,这时候就需要接收JSON传参数了。用RequestBody可以接收到JSON传值。
需要JSON请求才能正确接到值
您好,Spring Boot的PUT请求是用来更新资源的,它可以更新资源的部分属性,也可以完全替换资源。它的请求体是一个JSON格式的字符串,可以使用Raw格式来发送,最少200字最多500字。PUT请求的响应状态码为200,表示更新成功,如果更新失败,则响应状态码为400。
SpringBoot(SpringMVC)序列化和反序列化Json时默认使用的是Jackson(例如使用@RequestBody反序列化前端传递过来的Json字符串时),
当我们前端使用Json字符串传递到后台时日期格式可能是时间戳(即long类型的数字),也有可能是日期字符串(如:"yyyy-MM-dd", "yyyy-MM-dd HH:mm", "yyyy-MM-dd HH:mm:ss")等等。
如果是时间戳或者是yyyy-MM-dd格式的日期,Jackson会自动识别并且转换成功,若是yyyy-MM-dd HH:mm:ss这种格式的日期字符串的话,Jackson无法自动转换成Date类型。
这里有几种解决方案,如下:
我们可以在需要被反序列化的日期属性上添加comfasterxmljacksonannotationJsonFormat注解,如下:
这个注解对于Jackson 序列化以及反序列化均起作用 (即将日期对象序列化成Json时格式为以上指定的格式,将Json反序列化成日期时会按照以上指定的日期格式进行解析,若日期字符串的格式不满足以上指定的格式将会直接报错)
方法一我们只能指定一种日期的格式,但是我们前端可能传递各种类型的日期格式,这个时候我们需要自定义Json日期转换器,如下在日期类型的属性上添加comfasterxmljacksondatabindannotationJsonDeserialize注解,如下:
其中DateJacksonConverter类是我们自定义的日期转换类,这时在 反序列化 时我们可以转换多种格式的日期,DateJacksonConverter类定义如下:
在该方法中handledType()方法 可以不用重写。
以上两种方法都需要在实体类上添加注解,这种方式污染了实体类,并且要是类太多的话,添加注解是一个麻烦事,这时我们可以配置全局的日期类型转换器,如下:
采用这种方式我们自定义的DateJacksonConverter 必须重写 handledType()方法。
本人推荐采用方式三,这样不用污染实体类。
以下附上方式三的xml文件配置(若没有使用SpringBoot的话):
Tips:
1关于使用SpringMVC接受前端传递过来的QueryParameter数据(即后台使用@RequestParam接收)或者formdata数据(后台采用@RequestParam或者直接用对象接收),
若其中存在日期数据,则可以采用以下博客提到的方式进行日期类型的正确转换:
>
我也遇到过这个问题,我的现象是参数被截断,只剩下字符串最后大约十分之一的长度。
我也设置了max-request-size,没起作用,或许是springboot的bug。
后来换了另一种传输方式
后台controller用@RequestBody接收参数,前台ajax用contentType: "application/json; charset=utf-8"发送参数。
只有form形式的ajax参数才会被tomcat解析并截断,换用json形式就绕过了
以上就是关于我是这样使用SpringBoot(API传参)全部的内容,包括:我是这样使用SpringBoot(API传参)、springboot的put请求用raw、SpringBoot中使用@RequestBody时如何自定义需要转换的日期格式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)