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

OSCHINA-MIRROR/SnailClimb-jsoncat

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
README.md 9.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 13:02 1cea5b5

Перевод текста на русский язык:

Данный проект синхронизирован с облачным хранилищем кода, адрес: https://gitee.com/SnailClimb/jsoncat.

Соответствующее руководство обновляется в моём публичном аккаунте «JavaGuide», для получения всех руководств можно ответить «jsoncat» в личном кабинете.

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

Создание оригинального открытого исходного кода — непростая задача. Если вам нравится моя работа, пожалуйста, поддержите автора, поставив 1 звезду!

Введение

jsoncat — это лёгкий HTTP-фреймворк, созданный мной (Guide 哥, Gai) по образцу Spring Boot.

В jsoncat встроен HTTP-сервер на основе Netty, нет необходимости в дополнительных зависимостях от Tomcat или других веб-серверов. С помощью Netty можно реализовать простой HTTP-сервис всего за несколько десятков строк кода, он обладает высокой производительностью и малым весом.

Зачем это нужно?

Я создал этот проект просто ради интереса и удовольствия, а не для того, чтобы использовать его в реальных проектах. Моя основная цель — улучшить свои навыки кодирования. Я также рекомендую своим друзьям стараться воплощать свои идеи в жизнь.

Теоретические знания важны, но теория без практики ненадёжна. По сравнению с CRUD, создание собственного проекта интереснее и лучше развивает навыки программирования и решения проблем.

Особенности

  1. Встроенный HTTP-сервер на базе Netty, нет необходимости в дополнительных зависимостях от Tomcat и других веб-сервисов.
  2. Код компактный и легко читаемый.
  3. Поддерживает распространённые аннотации Spring MVC, использование аналогично Spring MVC.
  4. Сервер возвращает только данные JSON клиенту.
  5. Интегрированы checkstyle, spotbugs, pmd и настроен хук фиксации для обеспечения качества кода.

Базовая информация о фреймворке и планы

С точки зрения функциональности, я не слишком старался имитировать исходный код Spring, это было бы не так уж необходимо. Я просто следовал своим идеям и заимствовал некоторые концепции из исходного кода Spring.

На самом деле, разработка прошла довольно быстро, большая часть времени была потрачена на рефакторинг. Честно говоря, я уже приложил все усилия, чтобы сделать код читаемым. Я стараюсь использовать минимум кода для реализации функций и не ухудшать читаемость.

В настоящее время я всё ещё не полностью удовлетворён результатом, и я приглашаю всех присоединиться к улучшению! Вместе мы сильнее!

Реализация функций

Обработка запросов GET и POST

  • @GetMapping: обработка запросов GET.
  • @PostMapping: обработка запросов POST.
  • @RequestBody: получение строки JSON, отправленной клиентом.
  • @RequestParam: получение параметров запроса URL.
  • @PathVariable: получение параметров/заполнителей из URL.

IOC

  • @Autowired: внедрение объектов.
  • @Component: объявление объекта управляемым контейнером IOC.
  • @Qualifier: указание внедряемого bean.
  • Решение проблемы циклических зависимостей.

AOP

  • @Aspect.
  • @Pointcut.
  • @Before.
  • @After.
  • @Order.
  • ......

Перехватчики

  • Поддержка перехватчика для всех bean-компонентов, реализующих интерфейс (на основе динамического прокси JDK).
  • Поддержка перехватчиков для bean-компонентов без реализации интерфейса (на основе динамического прокси CGLIB).
  • Поддержка глобального перехватчика (перехват всех bean-компонентов).
  • Поддержка настройки нескольких перехватчиков.
  • Поддержка пользовательского порядка выполнения перехватчиков.

Обработка исключений

  • @ControllerAdvice.
  • @ExceptionHandler.

Чтение конфигурационного файла

  • Поддержка чтения файлов yaml и properties.

Другое

  • @SpringBootApplication.
  • @Configuration.

Качество кода

  • Интеграция checkstyle.
  • Интеграция spotbugs (встретилась небольшая проблема, обновление gradle до версии 6.6.1 решило её).
  • Настройка хука фиксации.
  • Повышение тестового покрытия, увеличение стабильности кода и обеспечение поддержки для рефакторинга.

Демонстрация функций

User.java — класс сущности пользователя

@Data
@AllArgsConstructor
public class User {
    private String name;
    private String des;
    private Integer age;
}

UserDto.java — класс бизнес-логики пользователя

@Component
public class UserService {
    private Integer id = 1;

    private final Map<Integer, User> users = new HashMap<Integer, User>() {
        {
            put(1, new User("盖伦", "德玛西亚", 22));
        }
    };

    public User get(Integer id) {
        return users.get(id);
    }

    public List<User> create(@RequestBody UserDto userDto) {
        users.put(++id, new User(userDto.getName(), userDto.getDes(), userDto.getAge()));
        return new ArrayList<>(users.values());

    }

    public void say() {
        System.out.println("UserService say 你真帅!");
    }
}

UserDto.java — объект передачи данных для создания пользователя

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDto {
    private String name;
    private String des;
    private Integer age;
}

UserController.java — взаимодействие пользователя с интерфейсом

@RestController("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping
    public User get(@RequestParam("name") String name, @RequestParam("des") String des, @RequestParam("age") Integer age) {
        return new User(name, des, age);
    }

    @GetMapping("/{id}")
    public User get(@PathVariable("id") Integer id) {
        return userService.get(id);
    }

    @PostMapping
    public List<User> create(@RequestBody UserDto userDto) {
        return userService.create(userDto);
    }
}

Запрос GET: передача параметра @PathVariable

Запрос GET: передача параметров @RequestParam

Запрос POST

Обработка ошибок в запросах

Когда тип передаваемого параметра неверен:

![](media/images/ошибка обработки - неправильный тип параметра.png)

Если указанный параметр не передан:

![](media/images/обработка ошибок - указанный параметр не передан.png)

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/SnailClimb-jsoncat.git
git@api.gitlife.ru:oschina-mirror/SnailClimb-jsoncat.git
oschina-mirror
SnailClimb-jsoncat
SnailClimb-jsoncat
master