diff --git a/whatsmars-spring-boot/README.md b/whatsmars-spring-boot/README.md index 2b3b664c76e8f313f6e8f4f091747003dfdbbfac..d307417e71c07bd009ed518309db3fdd425f6ef5 100644 --- a/whatsmars-spring-boot/README.md +++ b/whatsmars-spring-boot/README.md @@ -1,4 +1,5 @@ -启动后访问 http://localhost/
+启动后访问 http://localhost:8081/
+swagger http://localhost:8081/swagger-ui.html mvn clean package -DskipTests
得到的jar包中的MANIFEST.MF其中几行:
diff --git a/whatsmars-spring-boot/pom.xml b/whatsmars-spring-boot/pom.xml index 92d33d15fc2b341f77e66d8606be9333d8aa99c5..d954a06d4ae705e7e65e58e77cd08f48029246b5 100644 --- a/whatsmars-spring-boot/pom.xml +++ b/whatsmars-spring-boot/pom.xml @@ -14,6 +14,9 @@ com.itlong.whatsmars.spring.boot.App 0.1.1 + 2.5.0 + 2.8.0 + 20.0 @@ -117,6 +120,36 @@ 1.0.31 + + + io.springfox + springfox-swagger2 + 2.5.0 + + + com.google.guava + guava + + + + + io.springfox + springfox-swagger-ui + ${springfox.swagger2.version} + + + + + com.google.code.gson + gson + ${google.gson.version} + + + com.google.guava + guava + ${google.guava.version} + + diff --git a/whatsmars-spring-boot/src/main/java/com/itlong/whatsmars/spring/boot/common/ProfileUtils.java b/whatsmars-spring-boot/src/main/java/com/itlong/whatsmars/spring/boot/common/ProfileUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..cca818b7ab5346e1fcc2e320823b40f4850bbf31 --- /dev/null +++ b/whatsmars-spring-boot/src/main/java/com/itlong/whatsmars/spring/boot/common/ProfileUtils.java @@ -0,0 +1,49 @@ +package com.itlong.whatsmars.spring.boot.common; + +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +/** + * Created by shenhongxi on 2017/8/2. + */ +@Component +public class ProfileUtils implements InitializingBean { + + @Autowired + private Environment env; + + private static final String PROFILE_PROD = "prod"; + private static final String PROFILE_TEST = "test"; + private static final String PROFILE_DEV = "dev"; + + private static List profiles = Collections.unmodifiableList(new ArrayList()); + + @Override + public void afterPropertiesSet() throws Exception { + profiles = Collections.unmodifiableList(Arrays.asList(env.getActiveProfiles())); + } + + public static boolean isProd() { + return profiles.contains(PROFILE_PROD); + } + + public static boolean isTest() { + return profiles.contains(PROFILE_TEST); + } + + public static boolean isDev() { + return profiles.contains(PROFILE_DEV); + } + + public static List getProfiles() { + return profiles; + } + +} diff --git a/whatsmars-spring-boot/src/main/java/com/itlong/whatsmars/spring/boot/config/SwaggerConfig.java b/whatsmars-spring-boot/src/main/java/com/itlong/whatsmars/spring/boot/config/SwaggerConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..488cf6d4c197c5352e03d81fb69bb25ef2fc1238 --- /dev/null +++ b/whatsmars-spring-boot/src/main/java/com/itlong/whatsmars/spring/boot/config/SwaggerConfig.java @@ -0,0 +1,84 @@ +package com.itlong.whatsmars.spring.boot.config; + +import com.fasterxml.classmate.TypeResolver; +import com.itlong.whatsmars.spring.boot.App; +import com.itlong.whatsmars.spring.boot.common.ProfileUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.core.env.Environment; +import org.springframework.http.ResponseEntity; +import org.springframework.web.context.request.async.DeferredResult; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.schema.WildcardType; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger.web.UiConfiguration; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import static springfox.documentation.schema.AlternateTypeRules.newRule; + +@Profile({"dev", "test"}) +@ConditionalOnClass(EnableSwagger2.class) +@EnableSwagger2 +@Configuration +public class SwaggerConfig { + + @Autowired + private TypeResolver typeResolver; + @Autowired + private Environment env; + + @Bean + public Docket swaggerSpringMvcPlugin() { + return new Docket(DocumentationType.SWAGGER_2) + .groupName("business-api") + .select() + .apis(RequestHandlerSelectors.basePackage(App.class.getPackage().getName())) + .paths(PathSelectors.any()) + .build() + .pathMapping("/") + .genericModelSubstitutes(ResponseEntity.class) + .alternateTypeRules(newRule(typeResolver.resolve(DeferredResult.class, typeResolver.resolve(ResponseEntity.class, WildcardType.class)), typeResolver.resolve(WildcardType.class))) +// .enableUrlTemplating(true) + .useDefaultResponseMessages(true) + .forCodeGeneration(false) + .host(host()) + .apiInfo(apiInfo()); + } + + + @Bean + public UiConfiguration uiConfig() { + return new UiConfiguration( + "validatorUrl",// url + "none", // docExpansion => none | list + "alpha", // apiSorter => alpha + "schema", // defaultModelRendering => schema + UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS, + false, // enableJsonEditor => true | false + true); // showRequestHeaders => true | false + } + + private String host() { + String port = env.getProperty("server.port"); + if (ProfileUtils.isDev()) { + return "localhost:" + port; + } + return "test.toutiao.im"; + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("Toutiao API") + .description("用于调试Toutiao RestAPI,只在test/dev中放开,prod中关闭") + .version("0.1") + .build(); + + } +} \ No newline at end of file diff --git a/whatsmars-spring-boot/src/main/java/com/itlong/whatsmars/spring/boot/controller/SampleController.java b/whatsmars-spring-boot/src/main/java/com/itlong/whatsmars/spring/boot/controller/SampleController.java index 44d101674fa0a59094a9d5f62acc2ab99630d12d..0b71189aa2f3890a8c844e542906058bfc803de3 100644 --- a/whatsmars-spring-boot/src/main/java/com/itlong/whatsmars/spring/boot/controller/SampleController.java +++ b/whatsmars-spring-boot/src/main/java/com/itlong/whatsmars/spring/boot/controller/SampleController.java @@ -10,6 +10,7 @@ import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.i18n.AbstractLocaleResolver; @@ -49,7 +50,7 @@ public class SampleController { @RequestMapping("/changeLang") @ResponseBody - public String changeLang(HttpServletRequest request, HttpServletResponse response, String lang){ + public String changeLang(HttpServletRequest request, HttpServletResponse response, @RequestParam String lang){ LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request); if ("zh".equals(lang)) { // request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, new Locale("zh", "CN")); @@ -61,7 +62,7 @@ public class SampleController { return "lang:" + LocaleContextHolder.getLocale().getLanguage(); } - @RequestMapping("/") + @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Map map) { System.out.println(LocaleUtils.isEnLocale()); map.put("hello", "Hi, boy!"); diff --git a/whatsmars-spring-boot/src/main/resources/application-dev.properties b/whatsmars-spring-boot/src/main/resources/application-dev.properties index 146eccbfe4242f1470db332c04366048ad88366b..729c5adac3246655bbe1eba5a65e01074e2f7d0c 100644 --- a/whatsmars-spring-boot/src/main/resources/application-dev.properties +++ b/whatsmars-spring-boot/src/main/resources/application-dev.properties @@ -1,4 +1,4 @@ -server.port: 80 +server.port: 8081 spring.session.store-type=redis server.session.timeout=14400 diff --git a/whatsmars-spring-boot/src/main/resources/application.properties b/whatsmars-spring-boot/src/main/resources/application.properties index deca55a39e9366929b1f856a0d9b90c16c5f4fa1..e8c8cead2cefcc5ef69e30c8e5aac759afa885ee 100644 --- a/whatsmars-spring-boot/src/main/resources/application.properties +++ b/whatsmars-spring-boot/src/main/resources/application.properties @@ -2,7 +2,7 @@ #spring.profiles.active=dev -spring.profiles.active=test +spring.profiles.active=dev spring.thymeleaf.cache=false