dynamicparams java_spring-dynamic-params
spring-dynamic-params
spring boot mvc参数类型转换,支持转换为子类对象访问以及参数验证
使用示例:
添加依赖
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
// 低版本gradle使用
// compile 'com.gitee.luws:spring-dynamic-params:Tag'
// 版本号查看仓库tag
implementation 'com.gitee.luws:spring-dynamic-params:0.1.3'
// 也可以使用GitHub
// implementation 'com.github.shenluw:spring-dynamic-params:0.1.3'
}
方法一
对实体对象添加@Sldp注解
@Sldp
public class Animal {
private String name;
private int age;
...
}
public class Dog extends Animal {
private String face;
private String speed;
...
}
创建添加访问接口
public class TestController {
private final static Logger log = getLogger(TestController.class);
@RequestMapping("/1")
public void test1(Animal a) {
log.info("test1: {}", a);
}
}
测试接口
request:
http://xxxxx/1?name=test&age=12&speed=120&sldp=top.shenluw.sldp.Dog
response:
a 实际类型为 Dog
方法二
为方法添加@Sldp注解
删除Animal上的注解
public class Animal {
private String name;
private int age;
...
}
修改访问接口
public class TestController {
private final static Logger log = getLogger(TestController.class);
@RequestMapping("/1")
public void test1(@Sldp Animal a) {
log.info("test1: {}", a);
}
}
测试接口
request:
http://xxxxx/1?name=test&age=12&speed=120&sldp=top.shenluw.sldp.Dog
response:
a 实际类型为 Dog
方法三
实体对象实现DynamicModel接口
删除Animal上的注解
public class Animal implements DynamicModel {
private String name;
private int age;
...
}
修改访问接口
public class TestController {
private final static Logger log = getLogger(TestController.class);
@RequestMapping("/1")
public void test1(Animal a) {
log.info("test1: {}", a);
}
}
测试接口
request:
http://xxxxx/1?name=test&age=12&speed=120&sldp=top.shenluw.sldp.Dog
response:
a 实际类型为 Dog
使用json对象请求
接口可以实现参数为json格式的请求并转换为对应的格式
修改访问接口,设置注解参数为Json类型即可支持
@RestController
public class TestController {
private final static Logger log = getLogger(TestController.class);
@RequestMapping("/1")
public void test1(@Sldp(type = ModelType.Json) Animal a) {
log.info("test1: {}", a);
}
}
修改请求参数,添加json数据对应的字段即可实现
http://xxxxx/1?sldpJson={"name":"test name","age":12}&sldp=top.shenluw.sldp.Dog
支持多个对象参数
修改访问接口,设置注解参数别名即可支持
@RestController
public class TestController {
private final static Logger log = getLogger(TestController.class);
@RequestMapping("/1")
public void test1(@Sldp(name = "a") Animal a, @Sldp(name = "b") Animal b) {
log.info("test1: {} {}", a, b);
}
}
修改请求参数,为不同别名设置不通类型
http://xxxxx/1?name=test&age=12&face=mm&speed=1233&height=11&a=top.shenluw.sldp.BDog&b=top.shenluw.sldp.Cat
为类型设置别名
修改yaml,将top.shenluw.sldp.Dog别名修改为myName
sldp:
# 为类型设置别名
type-alias:
myName: top.shenluw.sldp.Dog
把请求参数中的sldp值修改为myName即可实现
http://xxxxx/1?sldpJson={"name":"test name","age":12}&sldp=myName
添加加密设置
sldp:
# 开启加密,默认关闭
enable-security: true
# 开启加密后是否使用全局加密,默认只对设置了SlSecurity注解的方法使用加密
default-security: true
当前加密只支持json方式,默认只提供了base64的测试样例
添加新的加密方法只需要实现Encryptor接口,然后配置成bean既可以
@Bean
public Encryptor myEncryptor(){
return MyEncryptor();
}
设置默认配置
sldp:
enable: true # 是否启用
# 设置默认处理器,下面这个为参数默认以json方式解析
default-processor: top.shenluw.sldp.processor.JacksonDynamicParamsMethodProcessor
# 设置json解析时携带数据的参数名称,就是把上面的sldpJson改为mydata
json-data-name: mydata
# 设置携带实际类型的参数名称,就是把上面的sldp改为mytype
type-name: mytype
# 为类型设置别名
type-alias:
myName: top.shenluw.sldp.Dog
# 选择json解析方式,当前可用选项 gson, jackson2, 默认 jackson2
json-type: jackson2
# Json解析多态时选择把class类型写入json的属性
type-property-name: "@custom"
Jackson多态配置
可以在字段或者类上配置 @JsonTypeInfo,如果要直接使用配置文件中的type-alias,则需要添加 @JsonTypeResolver(TypeAliasResolverBuilder.class)
public class Mix extends Animal {
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS)
@JsonTypeResolver(TypeAliasResolverBuilder.class)
private Animal dog;
}
Gson多态配置
使用Gson多态需要额外添加如下依赖,同时必须要配置type-alias关系才能正常使用
repositories {
...
maven { url 'https://artifactory.cronapp.io/public-release/' }
}
dependencies {
compileOnly 'com.google.code.gson:gson-extras:2.8.5'
}
dynamicparams java_spring-dynamic-params相关推荐
- flutter dio+rxdart
线上flutter 接口请求基本架构(线上实际项目搭建 不多讲直接上代码) 首先添加库: pubspec.yaml 目录下: dio: ^2.1.2 #dio 请求框架rxdart: ^0.21.0 ...
- 【dart学习】-- Dart之函数
1. 指定返回值得函数 /** * 无返回值的函数 * params: 可以是任意类型(var和Object类型也可以任意类型). 当然这里的参数类型你可以随意指定我这里已dynamic为例 * 参数 ...
- php绑定变量,php动态绑定变量的用法
本文实例讲述了php动态绑定变量的用法.分享给大家供大家参考.具体如下: private function bindVars($stmt,$params) { if ($params != null) ...
- weex eros框架源码解析
weex eros是基于alibaba weex框架进行二次封装的客户端跨平台开发框架,主要是为前端开发者(可以不用熟悉客户端开发)提供的一站式客户端app开发解决方案.官网地址为:https://b ...
- Flutter学习记录-关于一些常见实现
底部导航栏 return new Scaffold(bottomNavigationBar: BottomNavigationBar(items: [BottomNavigationBarItem(i ...
- flutter基于provider状态管理设置主题颜色、实现简单登录、注册功能---页面+逻辑
一.provider状态管理设置主题颜色 第一步: 安装依赖库 provider: ^4.3.2+3 第二步: 创建共享数据模型 import 'package:flutter/material.da ...
- native-JavaScript通信流程( 基于最新的 react native版本 )
JavaScriptModule是用来实现java端对JavaScript端的调用,java端的JavaScriptModule只是抽象,用来找到JavaScript端对应的JavaScriptMod ...
- allegro使用汇总 [转贴]
1.如何在allegro中取消花焊盘(十字焊盘) set up->design parameter -> shape->edit global dynamic shape param ...
- cadence常见技巧和错误。。。
转载于: http://blog.sina.com.cn/s/blog_66da2afc0101a4ft.html 1.如何在allegro中取消花焊盘(十字焊盘) set up->design ...
- allegro 问题
1.如何在 allegro 中取消花 焊盘 (十字焊盘) set up-design parameter - shape-edit global dynamic shape parameter ...
最新文章
- synchronized同步方法
- 视频中场的问题2009-04-03 19:38(一)
- 最新8篇ICML2020投稿论文:自监督学习、联邦学习、图学习、数据隐私、语言模型、终身学习...
- python的第三方库是干什么用的-Python 常用的标准库以及第三方库有哪些?
- 每日算法系列【LeetCode 330】按要求补齐数组
- jQuery.proxy用法
- jmeter系列六(processor)
- 网络爬虫的基本原理(一)
- 电子邮件系统是如何运作的?
- 全球及中国晶圆锯划片刀行业发展态势及投资潜力预测报告2021-2027年
- CorelDRAWX4的VBA插件开发(二十九)使用C++制作动态连接库DLL辅助VBA构键强大功能-(3)制作最简单的可供调用的DLL
- 程序员怎么才能让自己走得更高、更远?
- C++ yaml解析实战暨yaml-cpp库使用(1)认识yaml格式
- C++中的常成员函数以及const用于函数重载
- LINUX下的makefile学习(此文是我学习过程遇到问题时找到的所有回答,感谢其它大佬的回答,各个文章我都标明了原文链接)
- week16 CSP-M4-B ZJM要抵御宇宙射线
- 「开源之道」适兕:“关起门来搞开源,做不了开源世界的Leader”
- 单相桥式全控整流电路的matlab仿真,基于Matlab的单相桥式全控整流电路的仿真研究...
- 接地电阻测试仪使用方法讲解
- GoPro fusion(双目) Vr视频如何导出至手机和PC端(Win)
热门文章
- MFC之CString与const char* string 转换
- 【第一章】MySQL数据概述
- 225 Implement Stack using Queues(用队列实现栈Medium)
- python gui 选择
- 验证采集[Python]代理抓取并验证-多线程
- Excel develop
- oracle01144,ORA-01144
- 安川e7变频器接线_台达变频器C2000系列在铝箔纸压花机上的应用
- java jdom进行xml的增删改差_java使用DOM对XML文档进行增删改查操作实例代码
- openGauss凝聚创新力量,云和恩墨MogDB加速社区发展