Agile-Framework
Серия Agile-MVC стремится помочь разработчикам освободиться от сложного кода. Она основана на неизменной концепции «использовать самый простой код для создания самого красивого искусства». Spring-Agile предоставляет комплексное решение для веб-разработки. Этот проект включает в себя различные необходимые компоненты и вспомогательные инструменты, связанные с веб-разработкой, которые облегчают разработчикам использование этих компонентов для разработки монолитных и распределённых приложений с помощью модели программирования Agile.
Agile-mvc является основой серии фреймворков Agileframework. В настоящее время он успешно породил более десятка независимых и специализированных функциональных компонентов разработки, таких как cloud.agileframework, что заслуживает вашего ожидания.
Основные функции:
Set<MultipartFile>
:public Object myBusinessMethod(Set<MultipartFile> file){
}
AgileService
не добавлены некоторые аннотации из Spring MVC:警告:
1. AgileService代理服务中,未增加对原生springmvc中的参数类注解如@PathVariable、@RequestHeader、@Validated等等一类的注解解析。后续会根据用户反馈考虑增加该部分能力。
TypeReference
:TypeReference由common-util提供,包为cloud.agileframework.common.util.clazz,使用时一般为匿名内部类方式,具体方式请参照common-util组件
@Mapping
:@Mapping(path = "/test/{id}")
该参数验证适用于传统控制层与AgileService代理服务,API方式访问时会调用参数验证注解,实现请求拦截。注解支持声明业务代码方式参数验证,例:
@Validate
и @Mapping
:@Validate(value = "file", nullable = false)
@Validate(value = "id", customBusiness = {MyValidate.class})
@Mapping(path = "/test/{id}")
public Object test(int id, MultipartFile[] file) {
//业务代码
}
MyValidate
, который реализует проверку параметров://自定义业务验证
public static class MyValidate implements ValidateCustomBusiness {
//此处params为id值,当验证失败后需要自行组装错误信息List<ValidateMsg>,当错误信息为空集合时,认为参数准确,不进行拦截
@Override
public List<ValidateMsg> validate(Object params) {
return null;
}
}
{
"head": {
"ip": "192.168.101.42",
"code": "100002",
"msg": "参数错误",
"status": "OK"
},
"result": [
{
"message": "不允许为空值",
"state": false,
"item": "file",
"itemValue": null
}
]
}
{
"head": {
"ip": "172.29.128.1",
"code": "100000",
"msg": "操作失败",
"status": "INTERNAL_SERVER_ERROR"
},
"result": null
}
@Component
public class CommonResponseFormate extends AbstractResponseFormat {
@Override
public Map<String, Object> buildResponseData(Head head, Object result) {
//head为组件整理后的响应头部信息
//result为响应体信息
//自行定制返回结果状态为Map格式返回,该Map将作为ModelAndView中的Model组装成视图写入response
return null;
}
}
+ 控制层
```java
@Controller
public class MyController {
@RequestMapping("/test")
public ModelAndView test(String a) {
//业务代码...
//设置响应头 head
AgileReturn.setHead(RETURN.SUCCESS);
//设置响应体 result
AgileReturn.add("a", a);
//构建返回视图
return AgileReturn.build();
}
}
@AgileService
public class MyService {
//任何 return 结果都将组装成 result 部分
//头部信息则会根据是否捕获 Exception 异常界定 head 内部信息,未捕获情况下均使用正常 success 头
public Object myBusinessMethod(String param) {
//业务编码及持久层能力调用...
return xx;
}
//手动设置响应头,返回类型设为 RETURN,该方式存在代码入侵,尽在该方法不存在复用情况下使用为好
public RETURN myBusinessMethod(String param) {
//业务代码...
//构建返回视图
return RETURN.SUCCESS;
}
//利用国际化构造响应头 head,更多 RETURN 用法请参照 wiki
public RETURN myBusinessMethod(String param) {
//业务代码...
//构建返回视图
return RETURN.byMessage("国际化 key", "国际化参数 1", "国际ization参数 2...");
}
//手动设置响应体 result
public void myBusinessMethod(String param) {
//业务代码...
// 设置响应体 result
AgileReturn.add("a", param);
}
//通过异常声明响应头
//统一一场拦截器捕捉到异常后,会根据异常类引用名去国际化配置文件中获取响应文与响应编码信息,可阅读步骤 11 统一异常处理
public void myBusinessMethod(String param) throws YourException {
//业务代码...
//设置响应体 result
AgileReturn.add("a", param);
throw new YourException();
}}
借助 agile 系列套件 common-util 中 PropertiesUtil 的配置加载能力,实现在工程启动阶段自动扫描应用类所在包下以及编译路径下配置文件。避免杂乱的配置文件位置声明。
+ 重点:配置文件加载优先级从编译路径开始计算,层级越深,优先级越低,同层级则按照配置文件名顺序排列。application 配置文件保留最高优先级,优先级越高约被最后加载,覆盖低优先级配置
覆盖方式为内容覆盖,而不是文件覆盖,所以不同内容且文件名相同的配置文件,内容不会存在覆盖关系,仅对相同 key 值的配置项进行覆�зи。项目在启动阶段会于控制台按照由低到高的优先级顺序打印加载到的配置文件。例如
``` **Конфигурация загрузки процесса не зависит от Spring, загрузка будет заполнена в контейнер Spring впоследствии.**
Параметры конфигурации PropertiesUtil будут использовать эффективные параметры среды из контейнера Spring. Поэтому этот процесс загрузки не влияет на использование динамической конфигурации управления в микросервисной среде.
**Шаг 10: Интернационализация конфигурации**
MessageUtil в пакете spring-util инструментального комплекта Agile позволяет сканировать пути к файлам конфигурации в стиле Ant и совместим с исходным способом настройки. Исходный Spring не поддерживает `spring.messages.basename` с подстановочным знаком `*`, но Agile расширяет эту функцию и сохраняет поддержку для разделения нескольких basename с помощью английской запятой `,`.
В качестве примера интернационализации конфигурации используется файл message.properties. В этой конфигурации компонент будет загружать файлы message_xx.properties из любого уровня пути. Это позволяет избежать сложных объявлений путей к конфигурационным файлам в многомодульных средах разработки.
```yaml
spring:
messages:
encoding: UTF-8
basename: '**/message'
Шаг 11: Унифицированная обработка исключений
Компонент реализует унифицированную обработку исключений с помощью @ControllerAdvice и HandlerExceptionResolver. Любые перехваченные исключения обрабатываются как ответное представление. Разработчики могут определять различные сообщения интернационализации для разных классов исключений. Например, настраиваемый класс исключений com.agile.YourException настраивается следующим образом:
com.agile.YourException=100017: Неверное имя пользователя или пароль, пожалуйста, войдите снова
Здесь ключ — это ссылка на исключение, а значение — код ответа +: + ответное сообщение. Окончательный заголовок ответа выглядит следующим образом:
{
"head": {
"ip": "192.168.101.42",
"code": "100017",
"msg": "Неверное имя пользователя или пароль, пожалуйста, войдите снова",
"status": "INTERNAL_SERVER_ERROR"
},
"result": null
}
Статус в разделе head определяется по первой цифре кода ответа. По умолчанию код ответа, начинающийся с 2, считается ошибкой сервера и использует HttpStatus.INTERNAL_SERVER_ERROR. Также печатается журнал ошибок. Другие исключения считаются нормальными бизнес-исключениями и используют HttpStatus.OK без печати журнала ошибок.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )