====================
SMVC — это легковесный MVC-фреймворк, основанный на Java и зависящий от spring-core. Цели разработки фреймворка: бизнес-методы с аннотациями становятся интерфейсами. Цели разработки: этот прототип был создан для изучения Spring (прототип, https://github.com/feichendingxiangyong/Smvc), но позднее он был применён в реальных проектах и имеет следующие особенности:
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/## Требования
SMVC доступна под лицензией Apache, см. файл LICENSE для получения более подробной информации.## Инструкция по использованию
Только указание
returnType
на методе интерфейса
@RequestMapping(value = "", returnType = ReturnType.PAGE)
public String index()
{
// Возвращает страницу index
return "index";
}
Только указание
returnType
на методе интерфейса
@RequestMapping(value = "returnData", returnType = ReturnType.JSON)
public String returnData()
{
// Возвращает данные (фреймворк автоматически преобразует их в JSON)
return "smvc может быть хорошим.";
}
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";
}
Интерфейс:
@RequestMapping(value = "returnData", returnType = ReturnType.JSON)
public String returnData() {
// Прямое выбрасывание исключения
return "smvc может быть хорошим.";
}
Возвращаемое значение:
{
"code": 0,
"data": "smvc может быть хорошим.",
"message": "",
"returnCode": ""
}
Обратите внимание: тип параметра должен быть базовым объектом 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"
}
При возникновении исключения в интерфейсах страниц все они возвращают HTTP-статус 500. Если настроена страница ошибок, то автоматически переходит на страницу с HTTP-статусом 500.
Возвращается HTTP-статус 404. Если настроена страница ошибок, то автоматически переходит на страницу с HTTP-статусом 404.
Интерфейс:
@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": ""
}
Название области <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)
@Intercept(value = { LoginInterceptor.class })
public class DemoInterceptInterface
@RequestMapping(value = "executeTime", returnType = ReturnType.JSON)
@Clear(value = { LoginInterceptor.class })
@RequestMapping(value = "noNeedLogin", returnType = ReturnType.JSON)
@Clear(value = { LoginInterceptor.class })
public void noNeedLogin()
{
// Для данного метода логин не требуется
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )