SpringBoot是快速开发企业应用的一条捷径,尤其是在Spring4以后,项目完全不需要xml配置以来,让开发者感到巨大的流畅感。
我们使用Eclipse搭建一个基于maven的SpringBoot项目,不了解的可以看一下《用maven搭建springboot环境》。
新建maven项目,把需要的源包都建好,可以删掉web.xml文件,然后打开pom文件。这里我们的依赖要比上面文章里的多一些。
首先删除自动生成的Junit依赖,我们的单元测试虽然也是Junit,不过SpringBoot会自动添加依赖。
然后按照上面那篇文章添加parent
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.6.RELEASE</version> </parent>
这里使用的是最新的126发布版,所以不需要像文章中提到的那样增加下面的库
<!-- 使用 Spring repositories --> <!-- (我们使用的是SNAPSHOT版本,如果用RELEASE版本下面的偶不用写) --> <repositories> <repository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot</url> <snapshots><enabled>true</enabled></snapshots> </repository> <repository> <id>spring-milestones</id> <url>http://repo.spring.io/milestone</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot</url> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <url>http://repo.spring.io/milestone</url> </pluginRepository> </pluginRepositories>
接下来添加我们这里需要的几个依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.hateoas</groupId> <artifactId>spring-hateoas</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
第一个是SpringBoot的单元测试依赖;第二个是最主要的,用来开发webapp的web依赖;第三个是SpringBoot开发Restful服务的HATEOAS依赖;第四个是管理员使用的接口依赖。
然后我们新建一个Model
public class Greeting extends ResourceSupport { private long gid; private String content; @JsonCreator @JsonIgnoreProperties(ignoreUnknown = true) public Greeting(@JsonProperty(value = "gid") long gid, @JsonProperty(value = "content") String content) { this.gid = gid; this.content = content; }
这里只列出了类定义和构造器,你需要自己添加getter和setter方法。
这里的注解不是必须的,你可以都删掉。他们的作用可以自己看一下javadoc。
然后建一个controller
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; @RestController public class GreetingController { private static final String template = "Hello, %s"; private final AtomicLong counter = new AtomicLong(); @RequestMapping("/greeting") public Greeting greeting(@RequestParam(value = "name", defaultValue = "world") String name) { Greeting greeting = new Greeting(counter.incrementAndGet(), String.format(template, name)); GreetingController methodOn = methodOn(GreetingController.class); // GreetingController methodOn = DummyInvocationUtils.methodOn(GreetingController.class); Greeting greeting2 = methodOn.greeting(name); ControllerLinkBuilder linkTo = linkTo(greeting2); Link withSelfRel = linkTo.withSelfRel(); greeting.add(withSelfRel); return greeting; } @RequestMapping("/show") public Greeting show(){ RestTemplate template = new RestTemplate(); Greeting greeting = template.getForObject("http://localhost:8080/greeting?name=323", Greeting.class); System.err.println(greeting); return greeting; } }
@restController注解表明里面的每个action都返回的不是view。
然后我们使用内置的Tomcat服务器部署,这个服务器的性能和你本机下载的绿色版是一样的
@SpringBootApplication public class Application implements CommandLineRunner{ public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(Application.class, args); System.out.println("hohoho"); String[] names = context.getBeanDefinitionNames(); Arrays.sort(names); for (String string : names) { System.err.println(string); } } @Override public void run(String... args) throws Exception { RestTemplate template = new RestTemplate(); Greeting greeting = template.getForObject("http://localhost:8080/greeting?name=323", Greeting.class); System.err.println(greeting); } }
接下来我们分步验收我们的成果(就算成果吧)。
首先运行main方法,在浏览器里访问http://localhost:8080/greeting,你应该能看到你想看到的;然后访问http://localhost:8080/greeting?name=WhoAmI,应该和你预料的也一样,都是返回的JSON串。每个串里都有当前的访问路径,这就是HATEAOS的作用,人们认为调用服务的时候路径拼接不对很影响开发效率就非要加上这个。
我们已经验证了web依赖和hateaos依赖工作正常,接下来看一下actuator。不知道你注意到没有,应用启动的时候输出了很多类似
Mapped "{[/greeting],methods=[GET]}" onto ... Mapped "{[/env],methods=[GET]}" onto ... Mapped "{[/info],methods=[GET]}" onto ... Mapped "{[/health],methods=[GET]}" onto ...
的东西,是程序输出的而非我们打印的。
也行看到第一行你就会明白我们可以尝试访问http://localhost:8080/env 、 http://localhost:8080/health 、 http://localhost:8080/info等路径。actuator提供了很多管理员工具,更多的可以去官网了解。
接下来看一下单元测试。
在我们的GreetingController上面右键-新建-JUnit Test Case,把测试类的目录改到src/test/java下面。然后修改里面的代码,因为我们用不到它默认的测试方法
@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = MockServletContext.class) @WebAppConfiguration public class GreetingControllerTest { private MockMvc mvc; @Before public void setUp() { mvc = MockMvcBuilders.standaloneSetup(new GreetingController()).build(); } @Test public void getHello() throws Exception { ResultActions actions = mvc.perform(MockMvcRequestBuilders.get("/greeting").accept(MediaType.APPLICATION_JSON)); actions.andExpect(status().isOk()); // actions.andExpect(content().string(equalTo("Hello world"))); } }
这里面用到了几个静态导入,eclipse对静态导入的处理简直令人发指,你可以copy进去:
import static org.hamcrest.Matchers.equalTo; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
运行它,应该可以通过。然后把最下面一行的注释去掉,也就是增加一个新断言,认为返回的内容是Hello world。这次一定通不过了。
最后我们看一下主运行文件里面的那个run方法
@Override public void run(String... args) throws Exception { RestTemplate template = new RestTemplate(); Greeting greeting = template.getForObject("http://localhost:8080/greeting?name=323", Greeting.class); System.err.println(greeting); }
看到上面的复写注解就知道它来自哪里了是吧,没错,就是实现的那个接口CommandLineRunner(所以完全可以不实现)。实现了这个接口的类(需要是一个bean,不过@SpringBootApplication注解有这个功能)在成功运行后会调用这个run方法。
我们在run中把返回的json重新组装成Greeting实例。为了更清晰,你最好给Greeting类增加
@Override public String toString()
这个能成功的关键是构造器的参数中使用了@JsonProperty注解,并且使用了value参数。你可以删掉试一下效果。
既然是web service,所以我们的最后一步就是打开CORS访问,不然异步访问不了。我不太明白为什么一个随时随地可以同步访问的地址在异步的时候非要限制。新建一个FIlter
class SimpleCORSFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); chain.doFilter(req, res); }
这个类实现了javax.servlet.Filter接口。既然我们没有了web.xml文件,怎么才能让它拦截请求呢?我们可以给这个类加上自动配置的注解,比如org.springframework.stereotype.Component或org.springframework.stereotype.Repository。
相关推荐
- 在`@SpringBootApplication`类所在的包下,创建一个配置类,比如`AppConfig.java`,并添加`@Configuration`和`@MapperScan`注解来扫描Mapper接口: ```java @Configuration @MapperScan(...
标题 "eclipse+springboot+maven访问jsp页面" 涉及到的是一个常见的Java Web开发场景,其中Eclipse作为集成开发环境(IDE),Spring Boot作为应用框架,Maven作为项目构建工具,而JSP(JavaServer Pages)则用于创建...
在IT行业中,Eclipse是一款广泛使用的Java开发集成环境,而SpringBoot则是简化Spring框架使用、快速构建应用程序的框架。将这两个强大的工具结合在一起,可以极大地提高开发效率和项目管理的便利性。本篇文章将深入...
标题中的“eclipse_springboot_mybatis3 web项目”表明这是一个使用Eclipse集成开发环境创建...开发者可以通过阅读和研究该项目,学习如何在Eclipse环境中整合Spring Boot和MyBatis,以及如何进行Web应用的开发和测试。
5. **测试支持**:集成Spring Boot测试框架,如`@SpringBootTest`,提供测试类的编写和运行支持。 6. **配置文件处理**:可能提供对`application.properties`或`application.yml`配置文件的语法高亮和错误检查。 7...
本文将详细介绍如何在Eclipse 4.7上安装和使用SpringSource Tool Suite以及SpringBoot插件。 一、STS与Eclipse 4.7的兼容性 根据描述,"springsource-tool-suite-3.9.4.RELEASE-e4.7.3a-updatesite.zip"表明了这个...
SpringBoot 是一个由 Pivotal 开发的框架,旨在简化 Spring 应用程序的初始搭建以及开发过程。它集成了大量常用的第三方库配置,如 JDBC、MongoDB、JPA、RabbitMQ、Quartz 等,使得开发者可以快速地创建出基于 ...
8. 测试:创建一个测试类,使用 SpringBoot 的测试注解 `@SpringBootTest` 和 `@RunWith(SpringRunner.class)`,通过注入的 Service 或 Dao 进行 CRUD 操作测试。 完成以上步骤后,你就成功地在 Eclipse 上使用 ...
同时,也可以了解到 Maven 如何管理项目依赖和构建流程,以及如何在 Eclipse 这样的 IDE 中进行开发和调试。这些都是构建现代 Java Web 应用的基础知识,对于任何想要深入学习 SpringBoot 的开发者来说都是必要的。
项目中可能包含的文档,如README.md,提供了导入项目到Eclipse的步骤,以及如何运行和测试应用的说明。对于初学者来说,这些文档是快速上手的关键。 ### 7. 学习路径 理解并完成这个HelloWorld项目后,你可以...
在SpringBoot应用中,`META-INF`目录下的`MANIFEST.MF`文件尤为重要,因为它定义了应用的主类和依赖信息,SpringBoot会根据这个文件启动应用。 4. **WEB-INF** - 这是Java Web应用程序的标准目录结构的一部分,包含...
SpringBoot敏捷开发技术是现代Java应用开发中的一个关键框架,由Pivotal团队设计,旨在简化新Spring应用的启动和开发流程。它摒弃了传统Spring应用中的繁琐配置,采用了一种约定优于配置(Convention over ...
测试是软件开发的重要环节,SpringBoot提供`@SpringBootTest`注解进行集成测试,同时`@WebMvcTest`和`@DataJpaTest`可以帮助我们专注于特定的层进行单元测试。 总的来说,SpringBoot简化了Spring应用的开发,通过...
Java基于springboot开发的大学生体质测试管理系统--毕业论文+PPT+源代码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:...
SpringBoot是一种基于Java的轻量级...总之,这个SpringBoot开发的CRM系统源码是一个全面学习和实践SpringBoot、Java以及CRM系统设计的宝贵资源。通过深入分析和理解源码,我们可以提升自身的技术能力和项目管理能力。
Java基于springboot开发的班级综合测评管理系统+毕业论文和PPT+开发文档毕设 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发...
Java毕业设计--基于springboot开发的学生考勤管理系统--毕业论文+PPT(附源代码+演示视频) 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:...
《基于SpringBoot开发理财产品系统》 本项目是一个完整的理财产品的管理系统,它利用SpringBoot框架进行构建,结合了SSM(Spring、SpringMVC、MyBatis)的经典组合,旨在为用户提供一个高效、稳定的理财管理平台。...
Java毕业设计--基于springboot开发的原创歌曲分享平台--毕业论文+PPT(附源代码+演示视频) 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:...
Java毕业设计基于springboot开发的留守儿童爱心网站--毕业论文+PPT(附源代码和演示视频) 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:...