diff --git a/encode_resp/pom.xml b/encode_resp/pom.xml
new file mode 100644
index 0000000..3828e55
--- /dev/null
+++ b/encode_resp/pom.xml
@@ -0,0 +1,50 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.4.3
+
+
+ org.javaboy
+ encode_resp
+ 0.0.1-SNAPSHOT
+ encode_resp
+ Demo project for Spring Boot
+
+ 11
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ com.github.lenve
+ encrypt-spring-boot-starter
+ 0.0.3
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+ jitpack.io
+ https://jitpack.io
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/encode_resp/src/main/java/org/javaboy/encode_resp/EncodeRespApplication.java b/encode_resp/src/main/java/org/javaboy/encode_resp/EncodeRespApplication.java
new file mode 100644
index 0000000..91b84e4
--- /dev/null
+++ b/encode_resp/src/main/java/org/javaboy/encode_resp/EncodeRespApplication.java
@@ -0,0 +1,13 @@
+package org.javaboy.encode_resp;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class EncodeRespApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(EncodeRespApplication.class, args);
+ }
+
+}
diff --git a/encode_resp/src/main/java/org/javaboy/encode_resp/HelloController.java b/encode_resp/src/main/java/org/javaboy/encode_resp/HelloController.java
new file mode 100644
index 0000000..14e7025
--- /dev/null
+++ b/encode_resp/src/main/java/org/javaboy/encode_resp/HelloController.java
@@ -0,0 +1,37 @@
+package org.javaboy.encode_resp;
+
+import org.javaboy.encode_resp.model.User;
+import org.javaboy.encrypt.starter.anno.Decrypt;
+import org.javaboy.encrypt.starter.anno.Encrypt;
+import org.javaboy.encrypt.starter.model.RespBean;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author 江南一点雨
+ * @微信公众号 江南一点雨
+ * @网站 http://www.itboyhub.com
+ * @国际站 http://www.javaboy.org
+ * @微信 a_java_boy
+ * @GitHub https://github.com/lenve
+ * @Gitee https://gitee.com/lenve
+ */
+@RestController
+public class HelloController {
+ @GetMapping("/user")
+ @Encrypt
+ public RespBean getUser() {
+ User user = new User();
+ user.setId((long) 99);
+ user.setUsername("javaboy");
+ return RespBean.ok("ok", user);
+ }
+
+ @PostMapping("/user")
+ public RespBean addUser(@RequestBody @Decrypt User user) {
+ System.out.println("user = " + user);
+ return RespBean.ok("ok", user);
+ }
+}
diff --git a/encode_resp/src/main/java/org/javaboy/encode_resp/model/User.java b/encode_resp/src/main/java/org/javaboy/encode_resp/model/User.java
new file mode 100644
index 0000000..6d08c14
--- /dev/null
+++ b/encode_resp/src/main/java/org/javaboy/encode_resp/model/User.java
@@ -0,0 +1,39 @@
+package org.javaboy.encode_resp.model;
+
+/**
+ * @author 江南一点雨
+ * @微信公众号 江南一点雨
+ * @网站 http://www.itboyhub.com
+ * @国际站 http://www.javaboy.org
+ * @微信 a_java_boy
+ * @GitHub https://github.com/lenve
+ * @Gitee https://gitee.com/lenve
+ */
+public class User {
+ private Long id;
+ private String username;
+
+ @Override
+ public String toString() {
+ return "User{" +
+ "id=" + id +
+ ", username='" + username + '\'' +
+ '}';
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+}
diff --git a/encode_resp/src/main/resources/application.properties b/encode_resp/src/main/resources/application.properties
new file mode 100644
index 0000000..20d9c09
--- /dev/null
+++ b/encode_resp/src/main/resources/application.properties
@@ -0,0 +1 @@
+spring.encrypt.key=1234567890123456
\ No newline at end of file
diff --git a/encode_resp/src/test/java/org/javaboy/encode_resp/EncodeRespApplicationTests.java b/encode_resp/src/test/java/org/javaboy/encode_resp/EncodeRespApplicationTests.java
new file mode 100644
index 0000000..7124f34
--- /dev/null
+++ b/encode_resp/src/test/java/org/javaboy/encode_resp/EncodeRespApplicationTests.java
@@ -0,0 +1,13 @@
+package org.javaboy.encode_resp;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class EncodeRespApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}
diff --git a/encrypt-spring-boot-starter/pom.xml b/encrypt-spring-boot-starter/pom.xml
new file mode 100644
index 0000000..0444b2f
--- /dev/null
+++ b/encrypt-spring-boot-starter/pom.xml
@@ -0,0 +1,22 @@
+
+
+ 4.0.0
+ org.javaboy
+ encrypt-spring-boot-starter
+ 0.0.1
+ encrypt-spring-boot-starter
+ SpringBoot加密工具类
+
+ 11
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ provided
+ 2.4.3
+
+
+
+
diff --git a/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/anno/Decrypt.java b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/anno/Decrypt.java
new file mode 100644
index 0000000..03a71dd
--- /dev/null
+++ b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/anno/Decrypt.java
@@ -0,0 +1,20 @@
+package org.javaboy.encrypt.starter.anno;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author 江南一点雨
+ * @微信公众号 江南一点雨
+ * @网站 http://www.itboyhub.com
+ * @国际站 http://www.javaboy.org
+ * @微信 a_java_boy
+ * @GitHub https://github.com/lenve
+ * @Gitee https://gitee.com/lenve
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD,ElementType.PARAMETER})
+public @interface Decrypt {
+}
diff --git a/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/anno/Encrypt.java b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/anno/Encrypt.java
new file mode 100644
index 0000000..463d346
--- /dev/null
+++ b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/anno/Encrypt.java
@@ -0,0 +1,20 @@
+package org.javaboy.encrypt.starter.anno;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @author 江南一点雨
+ * @微信公众号 江南一点雨
+ * @网站 http://www.itboyhub.com
+ * @国际站 http://www.javaboy.org
+ * @微信 a_java_boy
+ * @GitHub https://github.com/lenve
+ * @Gitee https://gitee.com/lenve
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+public @interface Encrypt {
+}
diff --git a/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/autoconfig/EncryptAutoConfiguration.java b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/autoconfig/EncryptAutoConfiguration.java
new file mode 100644
index 0000000..1b260cc
--- /dev/null
+++ b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/autoconfig/EncryptAutoConfiguration.java
@@ -0,0 +1,19 @@
+package org.javaboy.encrypt.starter.autoconfig;
+
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author 江南一点雨
+ * @微信公众号 江南一点雨
+ * @网站 http://www.itboyhub.com
+ * @国际站 http://www.javaboy.org
+ * @微信 a_java_boy
+ * @GitHub https://github.com/lenve
+ * @Gitee https://gitee.com/lenve
+ */
+@Configuration
+@ComponentScan("org.javaboy.encrypt.starter")
+public class EncryptAutoConfiguration {
+
+}
\ No newline at end of file
diff --git a/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/model/RespBean.java b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/model/RespBean.java
new file mode 100644
index 0000000..9fcdcb2
--- /dev/null
+++ b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/model/RespBean.java
@@ -0,0 +1,72 @@
+package org.javaboy.encrypt.starter.model;
+
+/**
+ * @author 江南一点雨
+ * @微信公众号 江南一点雨
+ * @网站 http://www.itboyhub.com
+ * @国际站 http://www.javaboy.org
+ * @微信 a_java_boy
+ * @GitHub https://github.com/lenve
+ * @Gitee https://gitee.com/lenve
+ */
+public class RespBean {
+ private Integer status;
+ private String msg;
+ private Object obj;
+
+ public static RespBean build() {
+ return new RespBean();
+ }
+
+ public static RespBean ok(String msg) {
+ return new RespBean(200, msg, null);
+ }
+
+ public static RespBean ok(String msg, Object obj) {
+ return new RespBean(200, msg, obj);
+ }
+
+ public static RespBean error(String msg) {
+ return new RespBean(500, msg, null);
+ }
+
+ public static RespBean error(String msg, Object obj) {
+ return new RespBean(500, msg, obj);
+ }
+
+ private RespBean() {
+ }
+
+ private RespBean(Integer status, String msg, Object obj) {
+ this.status = status;
+ this.msg = msg;
+ this.obj = obj;
+ }
+
+ public Integer getStatus() {
+ return status;
+ }
+
+ public RespBean setStatus(Integer status) {
+ this.status = status;
+ return this;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public RespBean setMsg(String msg) {
+ this.msg = msg;
+ return this;
+ }
+
+ public Object getObj() {
+ return obj;
+ }
+
+ public RespBean setObj(Object obj) {
+ this.obj = obj;
+ return this;
+ }
+}
\ No newline at end of file
diff --git a/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/prop/EncryptProperties.java b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/prop/EncryptProperties.java
new file mode 100644
index 0000000..1c3596b
--- /dev/null
+++ b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/prop/EncryptProperties.java
@@ -0,0 +1,26 @@
+package org.javaboy.encrypt.starter.prop;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * @author 江南一点雨
+ * @微信公众号 江南一点雨
+ * @网站 http://www.itboyhub.com
+ * @国际站 http://www.javaboy.org
+ * @微信 a_java_boy
+ * @GitHub https://github.com/lenve
+ * @Gitee https://gitee.com/lenve
+ */
+@ConfigurationProperties(prefix = "spring.encrypt")
+public class EncryptProperties {
+ private final static String DEFAULT_KEY = "www.itboyhub.com";
+ private String key = DEFAULT_KEY;
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+}
diff --git a/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/req/DecryptRequest.java b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/req/DecryptRequest.java
new file mode 100644
index 0000000..90d2ab8
--- /dev/null
+++ b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/req/DecryptRequest.java
@@ -0,0 +1,62 @@
+package org.javaboy.encrypt.starter.req;
+
+import org.javaboy.encrypt.starter.anno.Decrypt;
+import org.javaboy.encrypt.starter.prop.EncryptProperties;
+import org.javaboy.encrypt.starter.utils.AESUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.core.MethodParameter;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpInputMessage;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.servlet.mvc.method.annotation.RequestBodyAdviceAdapter;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Type;
+
+/**
+ * @author 江南一点雨
+ * @微信公众号 江南一点雨
+ * @网站 http://www.itboyhub.com
+ * @国际站 http://www.javaboy.org
+ * @微信 a_java_boy
+ * @GitHub https://github.com/lenve
+ * @Gitee https://gitee.com/lenve
+ */
+@EnableConfigurationProperties(EncryptProperties.class)
+@ControllerAdvice
+public class DecryptRequest extends RequestBodyAdviceAdapter {
+ @Autowired
+ EncryptProperties encryptProperties;
+ @Override
+ public boolean supports(MethodParameter methodParameter, Type targetType, Class extends HttpMessageConverter>> converterType) {
+ return methodParameter.hasMethodAnnotation(Decrypt.class) || methodParameter.hasParameterAnnotation(Decrypt.class);
+ }
+
+ @Override
+ public HttpInputMessage beforeBodyRead(final HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class extends HttpMessageConverter>> converterType) throws IOException {
+ byte[] body = new byte[inputMessage.getBody().available()];
+ inputMessage.getBody().read(body);
+ try {
+ byte[] decrypt = AESUtils.decrypt(body, encryptProperties.getKey().getBytes());
+ final ByteArrayInputStream bais = new ByteArrayInputStream(decrypt);
+ return new HttpInputMessage() {
+ @Override
+ public InputStream getBody() throws IOException {
+ return bais;
+ }
+
+ @Override
+ public HttpHeaders getHeaders() {
+ return inputMessage.getHeaders();
+ }
+ };
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return super.beforeBodyRead(inputMessage, parameter, targetType, converterType);
+ }
+}
diff --git a/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/resp/EncryptResponse.java b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/resp/EncryptResponse.java
new file mode 100644
index 0000000..7ebedd6
--- /dev/null
+++ b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/resp/EncryptResponse.java
@@ -0,0 +1,53 @@
+package org.javaboy.encrypt.starter.resp;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.javaboy.encrypt.starter.anno.Encrypt;
+import org.javaboy.encrypt.starter.model.RespBean;
+import org.javaboy.encrypt.starter.prop.EncryptProperties;
+import org.javaboy.encrypt.starter.utils.AESUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.core.MethodParameter;
+import org.springframework.http.MediaType;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.server.ServerHttpRequest;
+import org.springframework.http.server.ServerHttpResponse;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
+
+/**
+ * @author 江南一点雨
+ * @微信公众号 江南一点雨
+ * @网站 http://www.itboyhub.com
+ * @国际站 http://www.javaboy.org
+ * @微信 a_java_boy
+ * @GitHub https://github.com/lenve
+ * @Gitee https://gitee.com/lenve
+ */
+@EnableConfigurationProperties(EncryptProperties.class)
+@ControllerAdvice
+public class EncryptResponse implements ResponseBodyAdvice {
+ private ObjectMapper om = new ObjectMapper();
+ @Autowired
+ EncryptProperties encryptProperties;
+ @Override
+ public boolean supports(MethodParameter returnType, Class extends HttpMessageConverter>> converterType) {
+ return returnType.hasMethodAnnotation(Encrypt.class);
+ }
+
+ @Override
+ public RespBean beforeBodyWrite(RespBean body, MethodParameter returnType, MediaType selectedContentType, Class extends HttpMessageConverter>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
+ byte[] keyBytes = encryptProperties.getKey().getBytes();
+ try {
+ if (body.getMsg()!=null) {
+ body.setMsg(AESUtils.encrypt(body.getMsg().getBytes(),keyBytes));
+ }
+ if (body.getObj() != null) {
+ body.setObj(AESUtils.encrypt(om.writeValueAsBytes(body.getObj()), keyBytes));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return body;
+ }
+}
diff --git a/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/utils/AESUtils.java b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/utils/AESUtils.java
new file mode 100644
index 0000000..8bc433b
--- /dev/null
+++ b/encrypt-spring-boot-starter/src/main/java/org/javaboy/encrypt/starter/utils/AESUtils.java
@@ -0,0 +1,39 @@
+package org.javaboy.encrypt.starter.utils;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import java.util.Base64;
+
+/**
+ * @author 江南一点雨
+ * @微信公众号 江南一点雨
+ * @网站 http://www.itboyhub.com
+ * @国际站 http://www.javaboy.org
+ * @微信 a_java_boy
+ * @GitHub https://github.com/lenve
+ * @Gitee https://gitee.com/lenve
+ */
+public class AESUtils {
+
+ private static final String AES_ALGORITHM = "AES/ECB/PKCS5Padding";
+
+ // 获取 cipher
+ private static Cipher getCipher(byte[] key, int model) throws Exception {
+ SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
+ Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
+ cipher.init(model, secretKeySpec);
+ return cipher;
+ }
+
+ // AES加密
+ public static String encrypt(byte[] data, byte[] key) throws Exception {
+ Cipher cipher = getCipher(key, Cipher.ENCRYPT_MODE);
+ return Base64.getEncoder().encodeToString(cipher.doFinal(data));
+ }
+
+ // AES解密
+ public static byte[] decrypt(byte[] data, byte[] key) throws Exception {
+ Cipher cipher = getCipher(key, Cipher.DECRYPT_MODE);
+ return cipher.doFinal(Base64.getDecoder().decode(data));
+ }
+}
\ No newline at end of file
diff --git a/encrypt-spring-boot-starter/src/main/resources/META-INF/spring.factories b/encrypt-spring-boot-starter/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..99dfa43
--- /dev/null
+++ b/encrypt-spring-boot-starter/src/main/resources/META-INF/spring.factories
@@ -0,0 +1 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.javaboy.encrypt.starter.autoconfig.EncryptAutoConfiguration
\ No newline at end of file
diff --git a/encrypt-spring-boot-starter/src/main/resources/application.properties b/encrypt-spring-boot-starter/src/main/resources/application.properties
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/encrypt-spring-boot-starter/src/main/resources/application.properties
@@ -0,0 +1 @@
+
diff --git a/flash_map/src/main/java/org/javaboy/flash_map/OrderController.java b/flash_map/src/main/java/org/javaboy/flash_map/OrderController.java
index 422ce76..230a2e5 100644
--- a/flash_map/src/main/java/org/javaboy/flash_map/OrderController.java
+++ b/flash_map/src/main/java/org/javaboy/flash_map/OrderController.java
@@ -1,6 +1,7 @@
package org.javaboy.flash_map;
import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletPath;
+import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@@ -15,6 +16,8 @@
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Locale;
/**
* @author 江南一点雨
@@ -29,11 +32,13 @@
public class OrderController {
@PostMapping("/order")
public String order(HttpServletRequest req) {
+
FlashMap flashMap = (FlashMap) req.getAttribute(DispatcherServlet.OUTPUT_FLASH_MAP_ATTRIBUTE);
flashMap.put("site", "www.javaboy.org");
flashMap.addTargetRequestParam("aa", "bb");
// attr.addFlashAttribute("site", "www.javaboy.org");
// attr.addAttribute("name", "微信公众号:江南一点雨");
+// Locale locale = LocaleContextHolder.getLocale();
return "redirect:/orderlist?aa=bb";
}
diff --git a/pathpattern/pom.xml b/pathpattern/pom.xml
new file mode 100644
index 0000000..a55b630
--- /dev/null
+++ b/pathpattern/pom.xml
@@ -0,0 +1,41 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.4.3
+
+
+ org.javaboy
+ pathpattern
+ 0.0.1-SNAPSHOT
+ pathpattern
+ Demo project for Spring Boot
+
+ 11
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/pathpattern/src/main/java/org/javaboy/pathpattern/HelloController.java b/pathpattern/src/main/java/org/javaboy/pathpattern/HelloController.java
new file mode 100644
index 0000000..3ea8596
--- /dev/null
+++ b/pathpattern/src/main/java/org/javaboy/pathpattern/HelloController.java
@@ -0,0 +1,21 @@
+package org.javaboy.pathpattern;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author 江南一点雨
+ * @微信公众号 江南一点雨
+ * @网站 http://www.itboyhub.com
+ * @国际站 http://www.javaboy.org
+ * @微信 a_java_boy
+ * @GitHub https://github.com/lenve
+ * @Gitee https://gitee.com/lenve
+ */
+@RestController
+public class HelloController {
+ @GetMapping("/hello")
+ public String hello() {
+ return "hello";
+ }
+}
diff --git a/pathpattern/src/main/java/org/javaboy/pathpattern/PathpatternApplication.java b/pathpattern/src/main/java/org/javaboy/pathpattern/PathpatternApplication.java
new file mode 100644
index 0000000..6401aa6
--- /dev/null
+++ b/pathpattern/src/main/java/org/javaboy/pathpattern/PathpatternApplication.java
@@ -0,0 +1,13 @@
+package org.javaboy.pathpattern;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class PathpatternApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(PathpatternApplication.class, args);
+ }
+
+}
diff --git a/pathpattern/src/main/java/org/javaboy/pathpattern/WebConfig.java b/pathpattern/src/main/java/org/javaboy/pathpattern/WebConfig.java
new file mode 100644
index 0000000..c9c49c5
--- /dev/null
+++ b/pathpattern/src/main/java/org/javaboy/pathpattern/WebConfig.java
@@ -0,0 +1,22 @@
+package org.javaboy.pathpattern;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * @author 江南一点雨
+ * @微信公众号 江南一点雨
+ * @网站 http://www.itboyhub.com
+ * @国际站 http://www.javaboy.org
+ * @微信 a_java_boy
+ * @GitHub https://github.com/lenve
+ * @Gitee https://gitee.com/lenve
+ */
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+ @Override
+ public void configurePathMatch(PathMatchConfigurer configurer) {
+ configurer.setUseTrailingSlashMatch(true);
+ }
+}
diff --git a/pathpattern/src/main/resources/application.properties b/pathpattern/src/main/resources/application.properties
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/pathpattern/src/main/resources/application.properties
@@ -0,0 +1 @@
+
diff --git a/pathpattern/src/test/java/org/javaboy/pathpattern/PathpatternApplicationTests.java b/pathpattern/src/test/java/org/javaboy/pathpattern/PathpatternApplicationTests.java
new file mode 100644
index 0000000..96b2f9e
--- /dev/null
+++ b/pathpattern/src/test/java/org/javaboy/pathpattern/PathpatternApplicationTests.java
@@ -0,0 +1,13 @@
+package org.javaboy.pathpattern;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class PathpatternApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}