1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/luws-spring-dynamic-params

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

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);
    }
}

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 объекта запроса

Интерфейс может реализовать параметр запроса в формате 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"

Конфигурация Jackson полиморфизма

Можно настроить @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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/luws-spring-dynamic-params.git
git@api.gitlife.ru:oschina-mirror/luws-spring-dynamic-params.git
oschina-mirror
luws-spring-dynamic-params
luws-spring-dynamic-params
master