新手基于spring boot开发Web API

网友投稿 240 2022-11-04


新手基于spring boot开发Web API

就是很爽,​​感觉比asp.net​​ mvc要灵活。

爽在哪里呢?

觉得路由定义比较灵活,而且很强大。我是JAVA初学者,以spring boot提供Web API为例,做一些总结。

一、生成一个Spring Boot项目 用idea来创建,好像不成功。原因好像是说有个百度验证,所以生成不了。那就到spring boot官网上生成一个,然后拿回本地,再打开。

二、代码结构

spring boot的源码结构,应该都是

/src/main/java/src/main/resoures

这种,估计是约定大于配置吧

三、添加一个API

1、新建一个控制器:HelloWorldController

控制器嘛,负责与页面(视图)交互,在页面与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;@Componentpublic 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'}

2)用到了配置文件信息

application.properties

author.name = \u9648\u9A71author.desc = \u50BB\u903C

4、模板文件 页面用到了模板文件。 这个模板文件要放在​​​src/main/resources/templates/​​下。

hello.html

im test page

loginId: loginName:
Hello World!

如上面所示,控制器代码为:

@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")

5、运行结果

1)返回字符串

2)返回json

3)返回页面

6、完整的application.properties和build.gradle1)application.properties

banner.charset=UTF-8server.tomcat.uri-encoding=UTF-8spring.= \u9648\u9A71author.desc = \u50BB\u903Cspring.jpa.database=oraclespring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriverspring.datasource.url=jdbc:oracle:thin:@192.168.0.22:1522/pdbzjfwptspring.datasource.username=jczsspring.datasource.password=jczsspring.jpa.hibernate.ddl-auto=updatemybatis.typeAliasesPackage=api.entity

2)build.gradle

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.8targetCompatibility = 1.8task 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')}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:全国重名查询API(全国重名查询在哪里查)
下一篇:前后端分离
相关文章

 发表评论

暂时没有评论,来抢沙发吧~