# mini-scaffolding-spring-boot-project **Repository Path**: baicaixiaozhan/mini-scaffolding-spring-boot-project ## Basic Information - **Project Name**: mini-scaffolding-spring-boot-project - **Description**: Spring Web 项目通用功能组件 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: https://gitee.com/baicaixiaozhan/mini-scaffolding-spring-boot-project - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-10-16 - **Last Updated**: 2022-11-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java, SpringBoot, SpringBootStarter ## README # mini-scaffolding-spring-boot-project Spring Web 项目通用功能组件 ## 使用 ```xml io.gitee.baicaixiaozhan mini-scaffolding-spring-boot-starter 1.1.0 ``` ### 支持 #### HTTP 请求统一返回对象 ```java @EnableUnifiedResults @SpringBootApplcation public class MiniScaffoldingSpringBootStarterUseCase { public static void main(String[] args) { SpringApplication.run(MiniScaffoldingSpringBootStarterUseCase.class, args); } /** * http_header + http_body mode * * @return UnifiedResult */ @Bean("unifiedResult") public UnifiedResult unifiedResult() { return new HttpServletResponseResult(); } @RequestMapping("/api/v1/") @RestController static class IndexController { /** * * http_body mode: * 1. @EnableUnifiedResults * 2. 请求 /api/v1/index * response_body: * { * "code":"200", * "message":"OK", * "data":{ * "username":"zhangsan", * "address":"shengzhen" * } * } * * * http_header + http_body mode: * 1. @EnableUnifiedResults * 2. @Bean HttpServletResponseResult * 3. 请求 /api/v1/index * response_header: * Server-Code: 200 * Server-Message: OK * response_body: * { * "username":"zhangsan", * "address":"shengzhen" * } * * * @return UserInfo */ @GetMapping("/index") public UserInfo index() { return UserInfo.builder() .username("zhangsan") .address("shengzhen") .build(); } } static class UserInfo implements Serializable { private String username; private String address; // get set builder method ..... } } ``` 特定情况下可能不需要为返回的对象做额外的包装处理,这时可以实现 `IgnoreResultsWrapperFilter` 接口来跳过包装。 ```java @Component class IgnoreStringFilter implements IgnoreResultsWrapperFilter { public boolean ignored(Object body, MethodParameter returnType, MediaType selectedContentType, Class extends HttpMessageConverter>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) { return body instanceof String; } } ``` 如果有 n 种情况需要源数据返回,对应实现 `IgnoreResultsWrapperFilter` 接口即可,如果需要有执行顺序可以在额外实现 `Ordered` 接口或者添加 `@Order` 注解。 #### HTTP Response 数据脱敏(`application/json`) ```java @RequestMapping("/api/v1") @RestController class DesensitizeAnnotationUseCaseDemo { /** * 支持 Jackson、 Gson 两种 HttpMessageConverter 模式 * response body: * { * "defaultPattern":"***************", * "username":"张**", * "idCard":"1****************6", * "phone":"138****3876", * "phone2":"0915****79", * "range":"12---67890", * "email":"z*******@gmail.com", * "address":"shenzhen" * } */ @GetMapping("/index") public UserInfo index() { return UserInfo.builder() .defaultPattern("default pattern") .username("张三丰") .idCard("110101199003071516") .phone("13849503876") .phone2("09157518479") .range("1234567890") .email("zhangsan@gmail.com") .address("shenzhen") .build(); } } @Builder @Data class UserInfo implements Serializable { @Desensitize private String defaultPattern; @Desensitize(pattern = Desensitize.Pattern.FULL_NAME) private String username; @Desensitize(pattern = Desensitize.Pattern.ID_CARD) private String idCard; @Desensitize(pattern = Desensitize.Pattern.MOBILE_PHONE) private String phone; @Desensitize(pattern = Desensitize.Pattern.FIXED_TELEPHONE) private String phone2; // 支持 Spring EL 表达式 @Desensitize(pattern = Desensitize.Pattern.RANGE, start = "2", end = "#str.length() - 5", delimiter = '-') private String range; @Desensitize(pattern = Desensitize.Pattern.EMAIL) private String email; private String address; } ``` ## Support - 邮箱:baicaixiaozhan1512@163.com
* http_body mode: * 1. @EnableUnifiedResults * 2. 请求 /api/v1/index * response_body: * { * "code":"200", * "message":"OK", * "data":{ * "username":"zhangsan", * "address":"shengzhen" * } * } *
* http_header + http_body mode: * 1. @EnableUnifiedResults * 2. @Bean HttpServletResponseResult * 3. 请求 /api/v1/index * response_header: * Server-Code: 200 * Server-Message: OK * response_body: * { * "username":"zhangsan", * "address":"shengzhen" * } *