作者:隐藏 版本:1.0
编译装载到本地Maven仓库
mvn clean
mvn compiler
mvn install
<!-- Spring++基于servlet4.0 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
<!-- Spring plus plus -->
<dependency>
<groupId>com.an</groupId>
<artifactId>spring-plus-plus</artifactId>
<version>1.0</version>
</dependency>
Maven:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgs>
<!-- Maven 编译参数要选择 保留参数 -->
<!-- 此设定请保证jdk版本在1.8以上,否则无法反射获取参数名 -->
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
idea:
- 在红色方框中输入
-parameters
-
创建
ApplicationLoader
类:实现
ServletContextListener
以便监听ServletContext
初始化事件
public class ApplicationLoader implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletApplication application=ServletApplication.run(sce.getServletContext());
}
}
- 在
web.xml
或者 使用@WebListener
注册监听器 这里只介绍 xml 注册方式
<listener>
<listener-class>com.an.spring.demo.ApplicationLoader</listener-class>
</listener>
- 在
resource
文件夹创建application.properties
文件
application.properties
配置:
#包扫描路径 (这里写你的项目的controller存放路径,扫描根目录也可)
spring-plus-plus.base-controller-scan-classpath=com.an.spring.demo.*
#请求接受的字符编码
spring-plus-plus.accept-charset=utf-8
#POST请求接受的Content-Type
spring-plus-plus.accept-content-type=application/json
- 使用
Controller
:
@RestController
只能注解在类名上,表示此类是一个 Rest API控制器,为后续的URLMapping扫描提供了基础标记
@GetMapping(value="",returnPath=false)
只能注解在带有 @RestController
的 public
且返回参数不为 void
的方法上。
此注解表示这个方法是一个Get请求的Rest API,收到value参数与请求URL匹配的GET请求时自动被调用并且自动注入参数。
returnPath=true
时,方法将会定向到返回的Path中(例如WEB目录的 *.jsp
文件),方法必须符合以下条件即生效
- 修饰符为
public
- 返回值为
String
基础用法:
@RestController
public class TestController {
/**
* 自动注入ServletRequest和ServletResponse
* 参数自动识别自动注入
* @param test url 参数
* @param request Servlet请求
* @param response Servlet回应
* @return 需要返回的数据
*/
@GetMapping("/api/v1/test/automatic-injection")
public String hello(String test, ServletRequest request, ServletResponse response) {
return test;
}
/**
* POST Body 自动注入
* @param user JavaBean
* @return 需要返回的数据
*/
@PostMapping("/api/v1/test/post")
public Object testPost(@RequestBody User user){
if (user!=null){
return "你好"+user.getName();
}
return "不存在User";
}
/**
* JSP快速跳转
* @param request Servlet请求
* @return 需要返回的数据
*/
@GetMapping(value = "api/v1/test/test-path",returnPath = true)
public String testPath(ServletRequest request){
request.setAttribute("name","张三");
return "/index.jsp";
}
}
复杂Bean的GET参数自动装配示例:
@RestController
public class Test2Controller {
/**
* 全自动Get参数拼装 Bean成员参数映射
* @param v1
* @param v2
* @param v3
* @param v5
* @param v4
* @return
*/
@GetMapping("/api/v1/test/param-test")
public Map<String,Object> testParam(Integer v1, Long v2, String v3, User v5,Boolean v4){
log.debug("v1={} v2={} v3={} v4={} v5={}",v1,v2,v3,v4, JSON.toJSONString(v5));
Map<String,Object> map=new HashMap<>();
map.put("v1",v1);
map.put("v2",v2);
map.put("v3",v3);
map.put("v4",v4);
map.put("v5",v5);
return map;
}
}
确保所有Maven依赖都在服务容器的lib目录中
启动Tomcat或Jetty