配置Swagger下Swagger2的相关授权

This commit is contained in:
2023-10-16 15:27:57 +08:00
parent 266b402ba5
commit 73aec7279e
5 changed files with 316 additions and 289 deletions

View File

@ -1,128 +1,131 @@
// package com.jnssd.config; package com.jnssd.config;
//
// import io.swagger.annotations.ApiOperation; import org.springframework.context.annotation.Bean;
// import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;
// import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder;
// import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.OAuthBuilder;
// import springfox.documentation.builders.OAuthBuilder; import springfox.documentation.builders.PathSelectors;
// import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors;
// import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.oas.annotations.EnableOpenApi;
// import springfox.documentation.oas.annotations.EnableOpenApi; import springfox.documentation.service.*;
// import springfox.documentation.service.*; import springfox.documentation.spi.DocumentationType;
// import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.service.contexts.SecurityContext;
// import springfox.documentation.spi.service.contexts.SecurityContext; import springfox.documentation.spring.web.plugins.Docket;
// import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger.web.ApiKeyVehicle;
// import springfox.documentation.swagger.web.ApiKeyVehicle; import springfox.documentation.swagger.web.SecurityConfiguration;
// import springfox.documentation.swagger.web.SecurityConfiguration; import springfox.documentation.swagger.web.SecurityConfigurationBuilder;
// import springfox.documentation.swagger.web.SecurityConfigurationBuilder; import springfox.documentation.swagger2.annotations.EnableSwagger2;
// import springfox.documentation.swagger2.annotations.EnableSwagger2;
// import java.util.ArrayList;
// import java.util.ArrayList; import java.util.Arrays;
// import java.util.Collections; import java.util.Collections;
// import java.util.List; import java.util.List;
//
// /** /**
// * <h3>spring-boot-openapi</h3> * <h3>spring-boot-openapi</h3>
// * <p></p> * <p></p>
// * *
// * @author zxj * @author zxj
// * @since 2023-10-12 17:13:09 * @since 2023-10-12 17:13:09
// */ */
// @Configuration @Configuration
// @EnableSwagger2 @EnableSwagger2
// @EnableOpenApi @EnableOpenApi
// public class SwaggerConfig { public class SwaggerConfig {
//
// @Bean private final String[] securitySchemeNames = {"ApiKey模式", "basicAuth模式", "oauth2的Password模式", "oauth2的authorization_code模式", "oauth2的implicit模式", "oauth2的clientCredentials模式"};
// public Docket api() {
// return new Docket(DocumentationType.SWAGGER_2)
// .apiInfo(apiInfo()) @Bean
// .select() public Docket api() {
// // 扫描特定包 return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
// // 扫描所有有注解的api用这种方式更灵活 // 扫描特定包
// // .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) // 扫描所有有注解的api用这种方式更灵活
// //.apis(RequestHandlerSelectors.any()) // .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
// .apis(RequestHandlerSelectors.basePackage("com.jnssd")) //.apis(RequestHandlerSelectors.any())
// .paths(PathSelectors.any()) .apis(RequestHandlerSelectors.basePackage("com.jnssd")).paths(PathSelectors.any()).build().securitySchemes(initSecuritySchemeList()).securityContexts(Collections.singletonList(securityContext()));
// .build() }
// .securitySchemes(initSecuritySchemeList())
// .securityContexts(Collections.singletonList(securityContext())); public ApiInfo apiInfo() {
// } return new ApiInfoBuilder().title("Swagger项目测试").description("novel项目接口文档").build();
// public ApiInfo apiInfo() { }
// return new ApiInfoBuilder()
// .title("Swagger项目测试")
// .description("novel项目接口文档")
// .build(); public List<SecurityScheme> initSecuritySchemeList() {
// } List<SecurityScheme> list = new ArrayList<>();
// list.add(securitySchemeBasicAuth());
// private SecurityContext securityContext() { list.add(securitySchemeApiKey());
// return SecurityContext.builder()
// .securityReferences(Collections.singletonList(new SecurityReference("OAuth2", new AuthorizationScope[0]))) // oauth2下的几个模式配置
// .build(); // 1. 密码模式
// } list.add(securitySchemeOAuth2Password());
// // 2. 客户端模式
// private List<AuthorizationScope> scopes() { list.add(securitySchemeOAuth2ClientCredentials());
// List<AuthorizationScope> list = new ArrayList<>(); // 3. 授权码模式
// list.add(new AuthorizationScope("read_scope", "Grants read access")); list.add(securitySchemeOAuth2AuthorizationCode());
// list.add(new AuthorizationScope("write_scope", "Grants write access")); // 4. 简化模式
// list.add(new AuthorizationScope("admin_scope", "Grants read write and delete access")); list.add(securitySchemeOAuth2Implicit());
// return list; return list;
// } }
//
// public List<SecurityScheme> initSecuritySchemeList() { // ApiKey模式
// List<SecurityScheme> list = new ArrayList<>(); private SecurityScheme securitySchemeApiKey() {
// list.add(securitySchemeOAuth2()); return new ApiKey("ApiKey模式", "Authorization", ApiKeyVehicle.HEADER.getValue());
// list.add(securitySchemeApiKey()); }
// // list.add(securitySchemeHttp());
// list.add(securitySchemeBasicAuth()); // basicAuth模式
// list.add(securitySchemeOauth2Schema()); private SecurityScheme securitySchemeBasicAuth() {
// return list; return new BasicAuth("basicAuth模式");
// } }
//
// private SecurityScheme securitySchemeOAuth2() { // oauth2下面的password模式
// List<GrantType> grantTypes = new ArrayList<>(); private SecurityScheme securitySchemeOAuth2Password() {
// grantTypes.add(new ResourceOwnerPasswordCredentialsGrant("/oauth/token")); List<GrantType> grantTypes = new ArrayList<>();
// return new OAuthBuilder() grantTypes.add(new ResourceOwnerPasswordCredentialsGrant("/oauth/token"));
// .name("OAuth2") return new OAuthBuilder().name("oauth2的Password模式").scopes(scopes()).grantTypes(grantTypes).build();
// .scopes(scopes()) }
// .grantTypes(grantTypes)
// .build(); // oauth2下面的authorization_code模式
// } private SecurityScheme securitySchemeOAuth2AuthorizationCode() {
// List<GrantType> grantTypes = new ArrayList<>();
// private SecurityScheme securitySchemeApiKey() { TokenRequestEndpoint tokenRequestEndpoint = new TokenRequestEndpoint("/oauth/authorize", "", "");
// return new ApiKey("Authorization", "api_key", ApiKeyVehicle.HEADER.getValue()); TokenEndpoint tokenEndpoint = new TokenEndpoint("/oauth/token", "token");
// } grantTypes.add(new AuthorizationCodeGrant(tokenRequestEndpoint, tokenEndpoint));
// return new OAuthBuilder().name("oauth2的authorization_code模式").scopes(scopes()).grantTypes(grantTypes).build();
// private SecurityScheme securitySchemeHttp() { }
// return HttpAuthenticationScheme.JWT_BEARER_BUILDER.name("JWT").build();
// } // oauth2下面的implicit模式
// private SecurityScheme securitySchemeOAuth2Implicit() {
// private SecurityScheme securitySchemeBasicAuth() { List<GrantType> grantTypes = new ArrayList<>();
// return new BasicAuth("basicAuth"); ImplicitGrant implicitGrant = new ImplicitGrant(new LoginEndpoint("/oauth/authorize"), "token");
// } grantTypes.add(implicitGrant);
// return new OAuthBuilder().name("oauth2的implicit模式").scopes(scopes()).grantTypes(grantTypes).build();
// private SecurityScheme securitySchemeOauth2Schema() { }
// List<GrantType> grantTypes = new ArrayList<>();
// TokenRequestEndpoint tokenRequestEndpoint = new TokenRequestEndpoint("/oauth/authorize", "", ""); // oauth2下面的ClientCredentials模式
// TokenEndpoint tokenEndpoint = new TokenEndpoint("/oauth/token", "token"); private SecurityScheme securitySchemeOAuth2ClientCredentials() {
// grantTypes.add(new AuthorizationCodeGrant(tokenRequestEndpoint, tokenEndpoint)); List<GrantType> grantTypes = new ArrayList<>();
// return new OAuthBuilder() grantTypes.add(new ClientCredentialsGrant("/oauth/token"));
// .name("oauth2schema") return new OAuthBuilder().name("oauth2的clientCredentials模式").scopes(scopes()).grantTypes(grantTypes).build();
// .scopes(scopes()) }
// .grantTypes(grantTypes)
// .build(); private SecurityContext securityContext() {
// } List<SecurityReference> list = new ArrayList<>();
// Arrays.stream(securitySchemeNames).forEach(s -> list.add(new SecurityReference(s, new AuthorizationScope[0])));
// @Bean return SecurityContext.builder().securityReferences(list).build();
// public SecurityConfiguration security() { }
// return SecurityConfigurationBuilder.builder()
// .clientId("") private List<AuthorizationScope> scopes() {
// .clientSecret("") List<AuthorizationScope> list = new ArrayList<>();
// .realm("*") list.add(new AuthorizationScope("read_scope", "Grants read access"));
// .appName("") list.add(new AuthorizationScope("write_scope", "Grants write access"));
// .scopeSeparator("") list.add(new AuthorizationScope("admin_scope", "Grants read write and delete access"));
// .useBasicAuthenticationWithAccessCodeGrant(false) return list;
// .build(); }
// } @Bean
// public SecurityConfiguration security() {
// } return SecurityConfigurationBuilder.builder().clientId("").clientSecret("").realm("*").appName("").scopeSeparator("").useBasicAuthenticationWithAccessCodeGrant(false).build();
}
}

View File

@ -1,145 +1,162 @@
package com.jnssd.config; // package com.jnssd.config;
//
import org.springframework.context.annotation.Bean; // import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; // import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.*; // import org.springframework.util.AntPathMatcher;
import springfox.documentation.oas.annotations.EnableOpenApi; // import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.service.*; // import springfox.documentation.builders.OpenIdConnectSchemeBuilder;
import springfox.documentation.spi.DocumentationType; // import springfox.documentation.builders.PathSelectors;
import springfox.documentation.spi.service.contexts.SecurityContext; // import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spring.web.plugins.Docket; // import springfox.documentation.oas.annotations.EnableOpenApi;
// import springfox.documentation.service.*;
import java.util.ArrayList; // import springfox.documentation.spi.DocumentationType;
import java.util.Collections; // import springfox.documentation.spi.service.contexts.SecurityContext;
import java.util.List; // import springfox.documentation.spring.web.plugins.Docket;
//
/** // import java.util.ArrayList;
* <h3>spring-boot-openapi</h3> // import java.util.Collections;
* <p>配置openapi</p> // import java.util.List;
* //
* @author zxj // /**
* @since 2023-10-13 14:29:58 // * <h3>spring-boot-openapi</h3>
*/ // * <p>配置openapi</p>
// *
@Configuration // * @author zxj
@EnableOpenApi // * @since 2023-10-13 14:29:58
public class SwaggerOpenApiConfig { // */
//
@Bean // @Configuration
public Docket api() { // @EnableOpenApi
return new Docket(DocumentationType.OAS_30) // public class SwaggerOpenApiConfig {
.apiInfo(apiInfo()) //
.select() // @Bean
// 扫描特定包 // public Docket api() {
// 扫描所有有注解的api用这种方式更灵活 // return new Docket(DocumentationType.OAS_30)
// .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) // .apiInfo(apiInfo())
//.apis(RequestHandlerSelectors.any()) // .select()
.apis(RequestHandlerSelectors.basePackage("com.jnssd")) // // 扫描特定包
.paths(PathSelectors.any()) // // 扫描所有有注解的api用这种方式更灵活
.build() // // .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.securitySchemes(initSecuritySchemeList()) // //.apis(RequestHandlerSelectors.any())
.securityContexts(Collections.singletonList(securityContext())); // .apis(RequestHandlerSelectors.basePackage("com.jnssd"))
} // .paths(PathSelectors.any())
// .build()
public ApiInfo apiInfo() { // .securitySchemes(initSecuritySchemeList())
return new ApiInfoBuilder() // .securityContexts(Collections.singletonList(securityContext()));
.title("Swagger项目测试") // }
.description("novel项目接口文档") //
.build(); // public ApiInfo apiInfo() {
} // return new ApiInfoBuilder()
// .title("Swagger项目测试")
private List<SecurityScheme> initSecuritySchemeList() { // .description("novel项目接口文档")
// .build();
List<SecurityScheme> list = new ArrayList<>(); // }
list.add(httpAuthenticationScheme()); //
list.add(securitySchemeApiKey()); // private List<SecurityScheme> initSecuritySchemeList() {
list.add(securitySchemeOpenIdConnect()); //
// List<SecurityScheme> list = new ArrayList<>();
// 配置oauth2的几种模式 // list.add(httpAuthenticationScheme());
list.add(securitySchemeOauth2ClientCredentials()); // list.add(securitySchemeApiKey());
list.add(securitySchemeOauth2implicit()); // list.add(securitySchemeOpenIdConnect());
list.add(securitySchemeOauth2Password()); //
list.add(securitySchemeOauth2AuthorizationCode()); // // 配置oauth2的几种模式
return list; // list.add(securitySchemeOauth2ClientCredentials());
} // list.add(securitySchemeOauth2implicit());
// list.add(securitySchemeOauth2Password());
private SecurityScheme httpAuthenticationScheme() { // list.add(securitySchemeOauth2AuthorizationCode());
return HttpAuthenticationScheme.JWT_BEARER_BUILDER.name("JWT的值").build(); // return list;
} // }
//
// ApiKey模式 // private SecurityScheme httpAuthenticationScheme() {
private SecurityScheme securitySchemeApiKey() { // return HttpAuthenticationScheme.JWT_BEARER_BUILDER.name("JWT的值").build();
return new ApiKey("Authorization授权", "Authorization", "header"); // }
} //
// // ApiKey模式
// OpenIdConnect // private SecurityScheme securitySchemeApiKey() {
private SecurityScheme securitySchemeOpenIdConnect() { // return new ApiKey("Authorization授权", "Authorization", "header");
return new OpenIdConnectSchemeBuilder() // }
.name("OpenId授权") //
.description("OpenIdConnect授权配置") // // OpenIdConnect
.openIdConnectUrl("/oauth/authorize") //
.build(); // // return new OpenIdConnectSchemeBuilder()
} // // .name("OpenId授权")
// // .description("OpenIdConnect授权配置")
// 客户端模式 // // .openIdConnectUrl("https://your-openid-connect-url")
private SecurityScheme securitySchemeOauth2ClientCredentials() { // // .build();
return OAuth2Scheme.OAUTH2_CLIENT_CREDENTIALS_FLOW_BUILDER // private SecurityScheme securitySchemeOpenIdConnect() {
.name("客户端模式") // // Swagger配置 OpenIdConnect
.tokenUrl("/oauth/authorize") // return new OpenIdConnectSchemeBuilder()
.scopes(scopes()) // .name("OpenIdConnect授权")
.build(); // .description("OpenIdConnect授权配置")
} // .openIdConnectUrl("https://your-openid-connect-url")
// .build();
// 隐式模式 // }
private SecurityScheme securitySchemeOauth2implicit() { //
return OAuth2Scheme.OAUTH2_IMPLICIT_FLOW_BUILDER // // 客户端模式
.name("简化模式") // private SecurityScheme securitySchemeOauth2ClientCredentials() {
.authorizationUrl("/oauth/authorize") // return OAuth2Scheme.OAUTH2_CLIENT_CREDENTIALS_FLOW_BUILDER
.scopes(scopes()) // .name("客户端模式")
.build(); // .tokenUrl("/oauth/authorize")
} // .scopes(scopes())
// .build();
// 密码模式 // }
private SecurityScheme securitySchemeOauth2Password() { //
return OAuth2Scheme.OAUTH2_PASSWORD_FLOW_BUILDER // // 隐式模式
.name("密码模式") // private SecurityScheme securitySchemeOauth2implicit() {
.tokenUrl("/oauth/token") // return OAuth2Scheme.OAUTH2_IMPLICIT_FLOW_BUILDER
.scopes(scopes()) // .name("简化模式")
.build(); // .authorizationUrl("/oauth/authorize")
} // .scopes(scopes())
// .build();
// 授权码模式 // }
private SecurityScheme securitySchemeOauth2AuthorizationCode() { //
return OAuth2Scheme.OAUTH2_AUTHORIZATION_CODE_FLOW_BUILDER // // 密码模式
.name("授权码模式") // private SecurityScheme securitySchemeOauth2Password() {
.authorizationUrl("/oauth/authorize") // return OAuth2Scheme.OAUTH2_PASSWORD_FLOW_BUILDER
.tokenUrl("/oauth/token") // .name("密码模式")
.scopes(scopes()) // .tokenUrl("/oauth/token")
.build(); // .scopes(scopes())
} // .build();
// }
private List<AuthorizationScope> scopes() { //
List<AuthorizationScope> list = new ArrayList<>(); // // 授权码模式
list.add(new AuthorizationScope("read_scope", "Grants read access")); // private SecurityScheme securitySchemeOauth2AuthorizationCode() {
list.add(new AuthorizationScope("write_scope", "Grants write access")); // return OAuth2Scheme.OAUTH2_AUTHORIZATION_CODE_FLOW_BUILDER
list.add(new AuthorizationScope("admin_scope", "Grants read write and delete access")); // .name("授权码模式")
return list; // .authorizationUrl("/oauth/authorize")
} // .tokenUrl("/oauth/token")
// .scopes(scopes())
private SecurityContext securityContext() { // .build();
return SecurityContext.builder() // }
.securityReferences(defaultAuth()) //
.operationSelector(operationContext -> { // private List<AuthorizationScope> scopes() {
System.out.println("operationContext" + operationContext); // List<AuthorizationScope> list = new ArrayList<>();
return !operationContext.httpMethod().name().equals("GET"); // list.add(new AuthorizationScope("read_scope", "Grants read access"));
}) // list.add(new AuthorizationScope("write_scope", "Grants write access"));
.build(); // list.add(new AuthorizationScope("admin_scope", "Grants read write and delete access"));
} // return list;
// }
private List<SecurityReference> defaultAuth() { //
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); // private SecurityContext securityContext() {
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; // return SecurityContext.builder()
authorizationScopes[0] = authorizationScope; // .securityReferences(defaultAuth())
return Collections.singletonList(new SecurityReference("密码模式", authorizationScopes)); // .operationSelector(operationContext -> {
} // System.out.println("operationContext" + operationContext);
} // // 除了get方法其他方法都要校验
// // return !operationContext.httpMethod().name().equals("GET");
//
// // 通过地址模糊匹配
// AntPathMatcher pathMatcher = new AntPathMatcher();
// String path = operationContext.requestMappingPattern();
// return pathMatcher.match("/menu/**", path) || pathMatcher.match("/user/**", path);
// })
// .build();
// }
//
// private List<SecurityReference> defaultAuth() {
// AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
// AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
// authorizationScopes[0] = authorizationScope;
// return Collections.singletonList(new SecurityReference("密码模式", authorizationScopes));
// }
// }

View File

@ -1,12 +1,12 @@
package com.jnssd.controller; package com.jnssd.controller;
import com.jnssd.model.Menu;
import com.jnssd.model.Role; import com.jnssd.model.Role;
import lombok.Data;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -17,7 +17,8 @@ import java.util.Objects;
* @author zxj * @author zxj
* @since 2023-10-12 16:32:38 * @since 2023-10-12 16:32:38
*/ */
@Data @RestController
@RequestMapping("/Role")
public class RoleController { public class RoleController {
final static String SUCCESS_TEXT = "操作成功!"; final static String SUCCESS_TEXT = "操作成功!";
@ -25,6 +26,7 @@ public class RoleController {
List<Role> list = new java.util.ArrayList<>(); List<Role> list = new java.util.ArrayList<>();
@GetMapping("/")
public ResponseEntity<List<Role>> getAll() { public ResponseEntity<List<Role>> getAll() {
return ResponseEntity.ok(list); return ResponseEntity.ok(list);
} }
@ -33,10 +35,11 @@ public class RoleController {
@PostMapping("add") @PostMapping("add")
public ResponseEntity<String> add(Role entity) { public ResponseEntity<String> add(Role entity) {
try { try {
entity.setId(Objects.requireNonNull(list.stream().max(Comparator.comparingInt(Role::getId)).get()).getId() + 1); entity.setId(list.size() + 1);
list.add(entity); list.add(entity);
return ResponseEntity.ok(SUCCESS_TEXT); return ResponseEntity.ok(SUCCESS_TEXT);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
return ResponseEntity.status(400).body(FAIL_TEXT); return ResponseEntity.status(400).body(FAIL_TEXT);
} }
} }
@ -46,7 +49,7 @@ public class RoleController {
public ResponseEntity<Object> update(Role entity) { public ResponseEntity<Object> update(Role entity) {
try { try {
// 修改list下面的数据 // 修改list下面的数据
list.replaceAll((Role) -> Objects.equals(Role.getId(), entity.getId()) ? entity : Role); list.replaceAll((role) -> Objects.equals(role.getId(), entity.getId()) ? entity : role);
return ResponseEntity.ok(SUCCESS_TEXT); return ResponseEntity.ok(SUCCESS_TEXT);
} catch (Exception e) { } catch (Exception e) {
@ -69,9 +72,9 @@ public class RoleController {
@PostMapping("query") @PostMapping("query")
public ResponseEntity<Object> query(Integer id) { public ResponseEntity<Object> query(Integer id) {
try { try {
Role Role = (Role) list.stream().filter(e -> Objects.equals(e.getId(), id)); Role role = (Role) list.stream().filter(e -> Objects.equals(e.getId(), id));
// list 下查询 // list 下查询
return ResponseEntity.ok(Role); return ResponseEntity.ok(role);
} catch (Exception e) { } catch (Exception e) {
return ResponseEntity.status(400).body(FAIL_TEXT); return ResponseEntity.status(400).body(FAIL_TEXT);
} }

View File

@ -1,11 +1,12 @@
package com.jnssd.controller; package com.jnssd.controller;
import com.jnssd.model.User; import com.jnssd.model.User;
import lombok.Data;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -16,7 +17,8 @@ import java.util.Objects;
* @author zxj * @author zxj
* @since 2023-10-12 16:30:04 * @since 2023-10-12 16:30:04
*/ */
@Data @RestController
@RequestMapping("/user")
public class UserController { public class UserController {
final static String SUCCESS_TEXT = "操作成功!"; final static String SUCCESS_TEXT = "操作成功!";
@ -24,6 +26,7 @@ public class UserController {
List<User> list = new java.util.ArrayList<>(); List<User> list = new java.util.ArrayList<>();
@GetMapping("/")
public ResponseEntity<List<User>> getAll() { public ResponseEntity<List<User>> getAll() {
return ResponseEntity.ok(list); return ResponseEntity.ok(list);
} }
@ -32,10 +35,11 @@ public class UserController {
@PostMapping("add") @PostMapping("add")
public ResponseEntity<String> add(User entity) { public ResponseEntity<String> add(User entity) {
try { try {
entity.setId(Objects.requireNonNull(list.stream().max(Comparator.comparingInt(User::getId)).get()).getId() + 1); entity.setId(list.size() + 1);
list.add(entity); list.add(entity);
return ResponseEntity.ok(SUCCESS_TEXT); return ResponseEntity.ok(SUCCESS_TEXT);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
return ResponseEntity.status(400).body(FAIL_TEXT); return ResponseEntity.status(400).body(FAIL_TEXT);
} }
} }
@ -45,7 +49,7 @@ public class UserController {
public ResponseEntity<Object> update(User entity) { public ResponseEntity<Object> update(User entity) {
try { try {
// 修改list下面的数据 // 修改list下面的数据
list.replaceAll((User) -> Objects.equals(User.getId(), entity.getId()) ? entity : User); list.replaceAll((user) -> Objects.equals(user.getId(), entity.getId()) ? entity : user);
return ResponseEntity.ok(SUCCESS_TEXT); return ResponseEntity.ok(SUCCESS_TEXT);
} catch (Exception e) { } catch (Exception e) {
@ -68,9 +72,9 @@ public class UserController {
@PostMapping("query") @PostMapping("query")
public ResponseEntity<Object> query(Integer id) { public ResponseEntity<Object> query(Integer id) {
try { try {
User User = (User) list.stream().filter(e -> Objects.equals(e.getId(), id)); User user = (User) list.stream().filter(e -> Objects.equals(e.getId(), id));
// list 下查询 // list 下查询
return ResponseEntity.ok(User); return ResponseEntity.ok(user);
} catch (Exception e) { } catch (Exception e) {
return ResponseEntity.status(400).body(FAIL_TEXT); return ResponseEntity.status(400).body(FAIL_TEXT);
} }

View File

@ -1,5 +1,5 @@
server: server:
port: 18080 port: 8080
# ======================================================================== # ========================================================================
# 启动报错需要修改以下mvc配置 Failed to start bean 'documentationPluginsBootstrapper' # 启动报错需要修改以下mvc配置 Failed to start bean 'documentationPluginsBootstrapper'