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

OSCHINA-MIRROR/1028125449-SMVC

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

SMVC

==================== Лицензия Платформа

SMVC — это легковесный MVC-фреймворк, основанный на Java и зависящий от spring-core. Цели разработки фреймворка: бизнес-методы с аннотациями становятся интерфейсами. Цели разработки: этот прототип был создан для изучения Spring (прототип, https://github.com/feichendingxiangyong/Smvc), но позднее он был применён в реальных проектах и имеет следующие особенности:

  • Независимость от приложения: достаточно аннотаций для конфигурации маршрутов;
  • Гибкая конфигурация маршрута: бизнес-сервисы с аннотациями становятся интерфейсами, а возвращаемое значение — JSON или имя страницы;
  • Автоматическое внедрение HTTP/JSON-параметров в методы интерфейсов;
  • Требования к типу запроса (JSON или form) и типу ответа (JSON или страница) можно указывать через аннотацию;
  • Простая конфигурация интерцептора: достаточно простого аннотирования.
  • Единая обработка ошибок: больше не требуется управление любыми исключениями, просто выбрасывайте их, и фреймворк вернет вам код ошибки.

Установка

Maven зависимость:

<!-- https://mvnrepository.com/artifact/wang.moshu/smvc-framework -->
<dependency>
    <groupId>wang.moshu</groupId>
    <artifactId>smvc-framework</artifactId>
    <version>0.0.3</version>
</dependency>

Демо

Запустите smvc-demo, откройте index.html для запуска тестового примера. Адрес демонстрации: http://123.206.202.189:8080/smvc-demo/## Требования

  • Java 6.0+

Лицензия

SMVC доступна под лицензией Apache, см. файл LICENSE для получения более подробной информации.## Инструкция по использованию

1. Типы возвратов интерфейса: страница или JSON

Только указание returnType на методе интерфейса

1.1 Возврат страницы

@RequestMapping(value = "", returnType = ReturnType.PAGE)
public String index()
{
    // Возвращает страницу index
    return "index";
}

1.2 Возврат JSON

Только указание returnType на методе интерфейса

@RequestMapping(value = "returnData", returnType = ReturnType.JSON)
public String returnData()
{
    // Возвращает данные (фреймворк автоматически преобразует их в JSON)
    return "smvc может быть хорошим.";
}

2. Возврат данных

2.1 Для возврата страницы, добавьте параметр типа Map в метод интерфейса, значения, добавленные в Map, будут переданы странице

@RequestMapping(value = "returnValue", returnType = ReturnType.PAGE)
public String returnValue(Map<Object, Object> returnMap) {
    returnMap.put("returnValue1", 1);
    returnMap.put("returnValue2", 2);
    // Возвращаем страницу
    return "returnValue";
}

2.2 Для возврата JSON, фреймворк автоматически оборачивает возвращаемое значение

Интерфейс:

@RequestMapping(value = "returnData", returnType = ReturnType.JSON)
public String returnData() {
    // Прямое выбрасывание исключения
    return "smvc может быть хорошим.";
}

Возвращаемое значение:

{
    "code": 0,
    "data": "smvc может быть хорошим.",
    "message": "",
    "returnCode": ""
}

3. Автоматическое внедрение параметров

3.1 Автоматическое внедрение параметров маршрута в параметры интерфейса

Обратите внимание: тип параметра должен быть базовым объектом Java Для следующего интерфейса значения параметров name и id маршрута автоматически внедряются в переменные name и id интерфейса.```
@RequestMapping(value = "routeParamInject/{name}/{id}", returnType = ReturnType.PAGE) public String routeParamInject(String name, Integer id, Map<Object, Object> returnMap) { returnMap.put("name", name); returnMap.put("id", id); // Возвращаем страницу return "routeParamInject"; }


#### 3.2 Внедрение параметров HTTP в параметры интерфейса (базовый объект Java)
Интерфейс:

@RequestMapping(value = "httpParamInject", returnType = ReturnType.PAGE) public String httpParamInject(String name, Integer id, Map<Object, Object> returnMap) { returnMap.put("name", name); returnMap.put("id", id); // Возвращаем страницу return "httpParamInject"; }

URL (поддерживается POST и GET):

http://localhost:8080/smvc-demo/p/httpParamInject?name=dingxy&id=1234


### 3.3 Внедрение параметров JSON в параметры интерфейса (пользовательский объект)
Аннотация `@RequestMapping` имеет переменную `requestDataType`, которая по умолчанию равна `FORMDATA`, то есть поддерживает только метод передачи параметров через HTTP. Если требуется поддержка преобразования JSON, необходимо указать **`requestDataType = RequestDataType.JSON`**

Интерфейс:

@RequestMapping(value = "jsonParamInject", requestDataType = RequestDataType.JSON, returnType = ReturnType.PAGE) public String jsonParamInject(HttpParamInjectRequest request, Map<Object, Object> returnMap) { Assert.notNull(request); returnMap.put("name", request.getName()); returnMap.put("id", request.getId()); // Возвращаем страницу return "httpParamInject"; }

URL (поддерживается POST и GET):

http://localhost:8080/smvc-demo/p/jsonParamInject?{"name":"dingxy","id":1234}

#### 4.1 Обработка исключений в JSON-интерфейсе  
При успешном выполнении интерфейса значение поля `code` возвращаемого JSON равно 0, а при возникновении ошибки — 1. Поле `returnCode` берется из поля `errorCode` выброшенного исключения типа `BusinessException`. В случае отсутствия исключения `BusinessException` либо отсутствия значения поля `errorCode`, поле `returnCode` принимает значение 000001.```java
    @RequestMapping(value = "throwException", returnType = ReturnType.JSON)
    public void throwException()
    {
        // Прямое выбрасывание исключения
        throw new BusinessException("101010", "Interface threw an exception");
    }

Пример возвращаемых данных:

{
    "code": 1,
    "data": "",
    "message": "Interface threw an exception",
    "returnCode": "101010"
}

4.2 Обработка исключений в страницах

При возникновении исключения в интерфейсах страниц все они возвращают HTTP-статус 500. Если настроена страница ошибок, то автоматически переходит на страницу с HTTP-статусом 500.

4.3 Доступ к несуществующему интерфейсу

Возвращается HTTP-статус 404. Если настроена страница ошибок, то автоматически переходит на страницу с HTTP-статусом 404.

5 Бизнес-сервис как интерфейс, возвращающий JSON

Интерфейс:

    @RequestMapping(value = "returnDataObj", returnType = ReturnType.JSON)
    public ReturnDataResponse returnDataObj(String name, Integer id)
    {
        Assert.notNull(name);
        Assert.notNull(id);
        ReturnDataResponse response = new ReturnDataResponse();
        response.setName(name);
        response.setId(id);
        return response;
    }

Класс ReturnDataResponse:

public class ReturnDataResponse
{
    private String name;
    private Integer id;

    // Геттеры и сеттеры
}

Запрос URL:

http://localhost:8080/smvc-demo/i/returnDataObj?name=dingxy&id=1234

Пример возвращаемых данных:

{
    "code": 0,
    "data": {
        "id": 1234,
        "name": "dingxy"
    },
    "message": "",
    "returnCode": ""
}

6 Поддержка загрузки файлов

Название области <input> файла используется как имя метода интерфейса или параметра запроса.Загрузка одного файла:

    @RequestMapping(value = "oneFileUpload", returnType = ReturnType.JSON)
    public String oneFileUpload(@RequestParam("file") MultipartFile file)

Загрузка нескольких файлов (параметр — массив объектов MultipartFile):

    @RequestMapping(value = "multiFileUpload", returnType = ReturnType.JSON)
    public String multiFileUpload(@RequestParam("files") MultipartFile[] files)

7 Интерцепторы

7.1 Аннотация Intercept: цель аннотации — классы и методы, указывающие, что этот интерцептор работает на данном классе или методе интерфейса

    @Intercept(value = { LoginInterceptor.class })
    public class DemoInterceptInterface
    @RequestMapping(value = "executeTime", returnType = ReturnType.JSON)
    @Clear(value = { LoginInterceptor.class })

7.2 Аннотация Clear: применяется к методам, указывает что данный интерцептор не будет работать в данном методе

@RequestMapping(value = "noNeedLogin", returnType = ReturnType.JSON)
@Clear(value = { LoginInterceptor.class })
public void noNeedLogin()
{
    // Для данного метода логин не требуется
}

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

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

Введение

SMVC — это облегчённый MVC-фреймворк, разработанный на Java. Основная идея фреймворка: метод с аннотацией является интерфейсом. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

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

Участники

все

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

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