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

OSCHINA-MIRROR/dingnate-ditty

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

ditty

Описание проекта

ditty — это минималистичный веб-фреймворк RESTful, реализованный с использованием netty и fastjson.

Инструкция по использованию

Написание контроллеров

/**
 * Класс для регистрации маршрутов, который должен иметь аннотацию {@link Controller}
 * @author dingnate
 *
 */
@ActionInterceptor(ControllerInterceptor.class)
@ActionMapping(actionKey = "/controller")
@Controller
public class DemoController {
	/**
	 * httpMethod указывает метод HTTP-запроса,
	 * argName — имя аргумента, которое можно использовать при доступе через веб.<br>
	 * actionKey: ключ действия контроллера и метода определяют уникальный маршрут этого метода.<br>
	 * Если метод не имеет actionKey, он будет установлен по умолчанию как имя метода.
	 * @param b
	 * @return
	 */
	@ActionMapping(httpMethod = HttpKit.METHOD_POST, actionKey = "method1", argNames = { "b" })
	public AxBean method1(BxBean b) {
		System.out.println(getClass().getName() + ".method1(BBean)");
		return new AxBean(1, true, "A", b);
	}

	/**
	 * Этот метод использует не только декларированный здесь интерцептор, но также и интерцепторы верхнего уровня контроллера и глобальные интерцепторы.
	 * @param a
	 * @return
	 */
	@ActionInterceptor(MethodInterceptor.class)
	@ActionMapping(argNames = { "a" })
	public int method2(int a) {
		System.out.println(getClass().getName() + ".method2(int)");
		return a;
	}

	/**
	 * Этот метод очищает верхний уровень интерцепторов, оставляя только этот метод.
	 * При доступе через веб, параметры могут быть заменены следующими значениями, например "a" -> "0"
	 * @param a
	 * @return
	 */
	@ClearActionInterceptor
	@ActionInterceptor(MethodInterceptor.class)
	@ActionMapping
	public String method3(String a) {
		System.out.println(getClass().getName() + ".method3(int)");
		return a;
	}

	/**
	 * Метод без аннотации ActionMapping не будет зарегистрирован и недоступен через веб.
	 */
	public void method4() {
		System.out.println(getClass().getName() + ".method4()");
	}
}

Написание интерцепторов

public class MethodInterceptor extends AbstractActionIntercptor {
	@Override
	public void interceptor(ActionInvoker invoker) {
		System.out.println(getClass().getName()+":in");
		invoker.invoke();
		System.out.println(getClass().getName()+":out");
	}
}

Запуск сервера

com.ditty.demo.server.ServerDemo.java

public class ServerDemo {
	public static void main(String[] args) {
		//Регистрация одного класса контроллера, используется когда отключен сканнер классов
		//HttpConfiguration.me().getRouters().add(Controller.class);
		//Запуск сканнера классов, конфигурирование префиксов классов и JAR-пакетов
		HttpConfiguration.me().getClassSaner().addClassPrefixes("com.ditty.demo.").addJarPrefixes("").scanClasses();
		//Запуск сканнера классов без конфигурирования префиксов, что приведет к полному сканированию всех классов
		//HttpConfiguration.me().getClassSaner().scanClasses();
		ServerFactory.me().getServer().start();
		//Настройка запуска сервера
		//ServerFactory.me().getServer().start(webDir, port, contextPath);
	}
}

Примечание: Поддерживается настраиваемое сканирование классов, автоматическая регистрация маршрутов для классов с аннотацией Controller.

Доступ через веб

method1

POST localhost:8090/controller/method1
{
	"b":{"a":1,"b":true,"d":"2018-05-26 16:36:34.039","s":"ss"}
}
{
  "returnValue": {
    "a": 1,
    "b": true,
    "bBean": {
      "a": 1,
      "b": true,
      "d": "2018-05-26 16:36:34.039",
      "s": "ss"
    },
    "s": "A"
  }
}

method2

POST localhost:8090/controller/method2
{
	"0":1
}
{
  "returnValue": 1
}

method3

POST localhost:8090/controller/method3/cc

Примечание: Параметры пути используются путем добавления значений параметров после /, разделенных -.

POST localhost:8090/controller/method3?0=cc
{
  "returnValue": "cc"
}

Примечание: Параметры запроса используются путем добавления выражений параметров после ?, разделенных &. Например, localhost:8090/controller/method?arg0=x0&arg2=x2.

Доступ к статическим ресурсам

GET localhost:8090/index.html

Примечание: Статические ресурсы должны содержать точку (.).

Журнал обновлений

2018-07-17

  • Включена кэширование экземпляров контроллеров

2018-06-22

  • Аннотация для регистрации маршрута изменена с ActionMapping на Controller
  • Удалена аннотация ClearAction

2018-06-20

  • JDK 1.7 -> JDK 1.6

2018-05-31

  • Поддержана настраиваемая проверка классов, автоматическая регистрация маршрутов для классов с аннотацией ActionMapping
  • Классы для регистрации маршрутов должны иметь аннотацию ActionMapping

2018-05-28

  • JDK 1.8 -> JDK 1.7

2018-05-27

  • Аннотация ActionMapping теперь поддерживает все методы HTTP: GET/POST/PUT/DELETE и т.д.
  • Поддержана передача параметров через URL-запросы localhost:8090/controller/method?arg0=x0&arg2=x2

Общение

Пожалуйста, оставьте свои отзывы или создайте issue, я буду рад ответить вам.

Поддержка

Если вы считаете, что данный проект был полезен для вас, ваша поддержка станет лучшим стимулом для меня.

Поддержать

Комментарии ( 0 )

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

Введение

Ditty — это минималистичный веб-фреймворк с RESTful API, основанный на Netty и Fastjson. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

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

Участники

все

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

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