版权声明:本文为博主原屙文章,喜欢你就担走。 https://blog.csdn.net/leftfist/article/details/85068569
就是很爽, 感觉比asp.net mvc要灵活。
爽在哪里呢?
觉得路由定义比较灵活,而且很强大。我是JAVA初学者,以spring boot提供Web API为例,做一些总结。
一、生成一个Spring Boot项目
用idea来创建,好像不成功。原因好像是说有个百度验证,所以生成不了。那就到spring boot官网上生成一个,然后拿回本地,再打开。
二、代码结构
spring boot的源码结构,应该都是
/src/main/java /src/main/resoures
这种,估计是约定大于配置吧
控制器嘛,负责与页面(视图)交互,在页面与Model(业务逻辑)之间传递消息,打打酱油。这属于MVC的范畴。当然,在SpringBoot里面,并不是说你这个类名叫"***Controller"就会被自动当成是个控制器,没有这种约定的( 但在asp.net mvc里就有,当然要放在适当的文件夹里才生效)。之所以会被访问到,是注解在起作用。SpringBoot就是喜欢用注解。
package api.controller; import api.entity.Author; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping(value="/api") public class HelloWorldController { @Autowired private Author entity; @ResponseBody @RequestMapping(value = "/helloworld", method = RequestMethod.GET) public String hello(){//返回JSON return "Hello World!"; } @ResponseBody @RequestMapping(value = "/helloworld2", method = RequestMethod.GET) public Author hello2(){//返回JSON return entity; } @RequestMapping(value = "/helloworld3", method = RequestMethod.GET) public String hello3(Model model) {//返回页面 model.addAttribute("loginName", entity.getName()); model.addAttribute("loginId", "100"); return "helloworld"; } }
2、注解说明
@Controller
与 @ResetController
有什么区别?
答曰:@Controller返回页面,而@ResetController返回JSON。并且
@ResetController = @Controller + @ResponseBody
@Controller
与 @ResetController
都是类级注解,而 @ResponseBody
可以是类级,也可以是函数级。
所以,如果一个控制器,既有函数返回页面,又有函数返回JSON,那么可以将类加上 @Controller
注解,想返回JSON的函数再加一个 @ResponseBody
。如上面的代码所示。
3、json
我发现spring boot里返回一个json特别简单,直接将一个实体类返回,不用做什么转换。如上面的例子:
@Autowired private Author entity; @ResponseBody @RequestMapping(value = "/helloworld2", method = RequestMethod.GET) public Author hello2(){//返回JSON return entity; }
这个author类
package api.entity; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import lombok.Getter; import lombok.Setter; @Component public class Author { @Value("${author.name:chenqu}") private @Getter @Setter String name; @Value("${author.desc:stupid}") private @Getter @Setter String desc; }
这个实体类:
1)用到了@Getter和@Setter来简化属性设置。这是一个第三方的插件。需要修改build.gradle
plugins { id 'io.franzbecker.gradle-lombok' version '1.8'//lombok,简化get和set id 'java' }
application.properties
author.name = /u9648/u9A71 author.desc = /u50BB/u903C
4、模板文件
页面用到了模板文件。
这个模板文件要放在 src/main/resources/templates/
下。
hello.html
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta> <title>im test page</title> </head> <body> <div> loginId:<span th:text="${loginId}"></span> loginName:<span th:text="${loginName}"></span> </div> <div>Hello World!</div> </body> </html>
如上面所示,控制器代码为:
@RequestMapping(value = "/helloworld3", method = RequestMethod.GET) public String hello3(Model model) {//返回页面 model.addAttribute("loginName", entity.getName()); model.addAttribute("loginId", "100"); return "helloworld"; }
模板文件采用的框架是thymeleaf:
//thymeleaf compile("org.springframework.boot:spring-boot-starter-thymeleaf")
1)返回字符串
2)返回json
3)返回页面
6、完整的application.properties和build.gradle
1)application.properties
banner.charset=UTF-8 server.tomcat.uri-encoding=UTF-8 spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true spring.http.encoding.force=true spring.messages.encoding=UTF-8 spring.profiles.active=prod server.port=8081 spring.thymeleaf.cache=false author.name = /u9648/u9A71 author.desc = /u50BB/u903C spring.jpa.database=oracle spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver spring.datasource.url=jdbc:oracle:thin:@192.168.0.22:1522/pdbzjfwpt spring.datasource.username=jczs spring.datasource.password=jczs spring.jpa.hibernate.ddl-auto=update mybatis.typeAliasesPackage=api.entity
buildscript { repositories { jcenter() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.2.RELEASE") } } plugins { id 'io.franzbecker.gradle-lombok' version '1.8'//lombok,简化get和set id 'java' } repositories { jcenter() } apply plugin: 'java' apply plugin: 'org.springframework.boot' apply plugin: 'eclipse' apply plugin: 'war'//生成war包 sourceCompatibility = 1.8 targetCompatibility = 1.8 task wrapper(type: Wrapper) { gradleVersion = '3.0' } dependencies { compile("org.springframework.boot:spring-boot-starter-web") testCompile("org.springframework.boot:spring-boot-starter-test") //部署到外部tomcat providedCompile("org.springframework.boot:spring-boot-starter-tomcat") //thymeleaf compile("org.springframework.boot:spring-boot-starter-thymeleaf") //oracle compile("com.oracle:ojdbc7:12.1.0.1") //mybatis compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.0") testCompile('org.mybatis.spring.boot:mybatis-spring-boot-starter-test:1.3.0') }