SpringBoot 处理 POST Json 传参枚举
在 Spring 框架中对枚举类型的序列化/反序列化是有限制的。
假设如下面这样在某些情况下就不能正常工作:
1 |
public enum PayChannelEnum implements BaseEnum<Integer> {
ALIPAY(20),
WECHARPAY(21);
private Integer code;
}
|
比如对于具有 PayChannelEnum 类型的参数的 HTTP 接口来说:
如果请求 /get?payChannel=ALIPAY,运行OK。但如果请求 /get?payChannel=20, 就会抛出 MethodArgumentTypeMismatchException 异常。
–
日常开发中主要有如下几种场景使用枚举:
GET方法, 参数列表中有枚举类型/自定义参数包含枚举;POST方法Form表单POST方法Json传参;
一般我们有如下步骤:
- 实现
ConverterFactory接口 - 注册转换器
代码:
1 |
public class implements ConverterFactory<String, BaseEnum> {
private static final Map<Class,Converter> CONVERTER_MAP=new HashMap<>();
public <T extends BaseEnum> Converter<String, T> getConverter(Class<T> aClass) {
|
但针对Json传参,传递值时机会解析报错,可以通过设置 @JsonCreator 和 @JsonValue来设定默认的反序列化方法. 示例:
1 |
public enum PayChannelEnum implements BaseEnum<Integer> {
ALIPAY(20),
WECHARPAY(21);
private Integer code;
PayChannelEnum(int code) {
|
抽取范型,方便多种类型枚举
1 |
public interface BaseEnum<T> {
@JsonValue
|
经过改造,就可以支持所有场景的枚举解析。
SpringBoot 处理 POST Json 传参枚举的更多相关文章
- json传参应用
json传参应用 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言.易于人阅 ...
- ASP.NET WebAPI RC 竟然不支持最常用的json传参
壮士断腕(WCF Web API),为的是 ASP.NET Web API 的横空出世,再加上它的开放(开源),于是对之产生了一点点痴情,并写下了HttpClient + ASP.NET Web AP ...
- HttpClient调用doGet、doPost、JSON传参及获得返回值
调用 doPost:map传参 Map<String,Object> map = new HashMap<>(); map.put("test"," ...
- json传参 js前端和java后端 的简单例子
下面讲解了从前端js对象-->json字符串-->java字符串---->java map的过程 1,初始化js对象 var param = {}; param.krel = kre ...
- 关于SQL Server 2017中使用json传参时解析遇到的多层解析问题
开发新的系统,DB部分使用了SQL Server从2016版开始自带的Json解析方式. 用了快半年,在个人项目,以及公司部分项目上使用了,暂时还没遇到大的问题,和性能问题. 今天在解析Json的多级 ...
- JSON传参
通过javascript将数据组织成json格式,然后传到java后台. 注意:前台json数组传参到后台时候需要将对象(json或json数组)转换成字符串(字符串数组). Simple: 1.前台 ...
- json传参报错
restful接口报错: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('e' (code 101)): w ...
- jquery 巧用json传参
JavaScript代码,巧用JSON传参数function AddComment(content) { var comment = {}; comment.threadId = $("#s ...
- [2019/05/17]解决springboot测试List接口时JSON传参异常
报错信息,大致如下 c.c.c.c.a.BaseControllerExceptionHandler : 运行时异常: java.lang.IllegalStateException: No prim ...
随机推荐
- Linux-sys文件系统
1.sys文件系统本质上和proc文件系统是一样的,都是虚拟文件系统.都在根目录下有个目录(一个是/proc目录,另一个是/sys目录),因此都不是硬盘中的文件,都是内核中的数据结构的可视化接口. 2 ...
- c++语法(2)
#include<iostream> #include<windows.h> using namespace std; class Parents { public: virt ...
- windows10系统激活方法
我使用的是第一种方法,很好用,企业版 https://blog.csdn.net/qq_39146974/article/details/82967054
- JavaWeb过滤器(Filter)
参考:https://blog.csdn.net/yuzhiqiang_1993/article/details/81288912 原理: 一般实现流程: 1.新建一个类,实现Filter接口2.实现 ...
- script和scriptreplay_超骚气的实时监控你的服务器
今天看到一个超级叼的linux命令,可以完整记录屏幕上的命令与输出结果. 有人问这有什么叼的,不就是保存历史操作记录吗?我看看日志也能看出来. 不不不,我要说的“完整记录”包括第几秒执行什么命令,就像 ...
- GSON解译Json为DTO
除了用okhttp网络库外,还用到google的gson库. 1. uti类的对象一般都用懒汉模式.这次gson也是用懒汉模式. public class GsonTools { private st ...
- 2019 年百度之星·程序设计大赛 - 初赛一 1005 Seq(数学规律)
http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=861&pid=1005 Sample Input Sampl ...
- mysql计算时间差-本例为计算分钟差然后/60计算小时保留一位小数,由于直接得小时只会取整
-- ORDER_TIME datetime NOT NULL(字段类型)SELECTso.`ID`,so.`ORDER_TIME`,NOW(),CONCAT(ROUND(TIMESTAMPDIFF( ...
- ionic3 修改打包时 android sdk 路径
修改 /platforms/android/local.properties 文件
- day14-单继承
#面向对象的三大特征:继承.多态.封装. #一.单继承: # 1. class Animal: #没有父类,默认继承了顶级父类object类. def __init__(self,name,aggr, ...