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
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 аннотацию к методу Удалить аннотацию @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 интерфейс Удалить аннотацию @Sldp из 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 и преобразовать его в соответствующий формат.
Изменить интерфейс доступа, установить тип параметра аннотации @Sldp как 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
Изменить интерфейс доступа, установить псевдоним параметра аннотации @Sldp
@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
json-data-name: mydata
# Установка имени параметра, используемого для переноса фактического типа при анализе
type-name: mytype
# Установить псевдоним типа, в этом примере myName используется для псевдонима типа Dog
type-alias:
myName: top.shenluw.sldp.Dog
# Выберите метод анализа json, в настоящее время доступны варианты gson, jackson2, по умолчанию используется jackson2
json-type: jackson2
# При анализе json выберите запись класса в атрибут типа
type-property-name: "@custom"
Можно настроить @JsonTypeInfo на поле или классе. Если вы хотите напрямую использовать конфигурацию псевдонима типа, вам нужно добавить
Примечание: предоставленный перевод не является точным техническим переводом и может содержать ошибки. ```java public class Mix extends Animal {
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS)
@JsonTypeResolver(TypeAliasResolverBuilder.class)
private Animal dog;
}
#### Gson多态配置
Для использования полиморфизма с Gson необходимо дополнительно добавить следующие зависимости и настроить отношения type-alias для корректной работы.
```groovy
repositories {
...
maven { url 'https://artifactory.cronapp.io/public-release/' }
}
dependencies {
compileOnly 'com.google.code.gson:gson-extras:2.8.5'
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )