# 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> 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