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