eclipse下SpringBoot开发和测试

SpringBoot是快速开发企业应用的一条捷径,尤其是在Spring4以后,项目完全不需要xml配置以来,让开发者感到巨大的流畅感。

我们使用Eclipse搭建一个基于maven的SpringBoot项目,不了解的可以看一下《用maven搭建springboot环境》。

新建maven项目,把需要的源包都建好,可以删掉web.xml文件,然后打开pom文件。这里我们的依赖要比上面文章里的多一些。

首先删除自动生成的Junit依赖,我们的单元测试虽然也是Junit,不过SpringBoot会自动添加依赖。

然后按照上面那篇文章添加parent

Xml代码  

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>1.2.6.RELEASE</version>
  5. </parent>

这里使用的是最新的126发布版,所以不需要像文章中提到的那样增加下面的库

Xml代码  

  1. <!-- 使用 Spring repositories -->
  2. <!-- (我们使用的是SNAPSHOT版本,如果用RELEASE版本下面的偶不用写) -->
  3. <repositories>
  4. <repository>
  5. <id>spring-snapshots</id>
  6. <url>http://repo.spring.io/snapshot</url>
  7. <snapshots><enabled>true</enabled></snapshots>
  8. </repository>
  9. <repository>
  10. <id>spring-milestones</id>
  11. <url>http://repo.spring.io/milestone</url>
  12. </repository>
  13. </repositories>
  14. <pluginRepositories>
  15. <pluginRepository>
  16. <id>spring-snapshots</id>
  17. <url>http://repo.spring.io/snapshot</url>
  18. </pluginRepository>
  19. <pluginRepository>
  20. <id>spring-milestones</id>
  21. <url>http://repo.spring.io/milestone</url>
  22. </pluginRepository>
  23. </pluginRepositories>

接下来添加我们这里需要的几个依赖

Xml代码  

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-test</artifactId>
  4. <scope>test</scope>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-web</artifactId>
  9. </dependency>
  10. <dependency>
  11. <groupId>org.springframework.hateoas</groupId>
  12. <artifactId>spring-hateoas</artifactId>
  13. </dependency>
  14. <dependency>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-actuator</artifactId>
  17. </dependency>

第一个是SpringBoot的单元测试依赖;第二个是最主要的,用来开发webapp的web依赖;第三个是SpringBoot开发Restful服务的HATEOAS依赖;第四个是管理员使用的接口依赖。

然后我们新建一个Model

Java代码  

  1. public class Greeting extends ResourceSupport {
  2. private long gid;
  3. private String content;
  4. @JsonCreator
  5. @JsonIgnoreProperties(ignoreUnknown = true)
  6. public Greeting(@JsonProperty(value = "gid") long gid, @JsonProperty(value = "content") String content) {
  7. this.gid = gid;
  8. this.content = content;
  9. }

这里只列出了类定义和构造器,你需要自己添加getter和setter方法。

这里的注解不是必须的,你可以都删掉。他们的作用可以自己看一下javadoc。

然后建一个controller

Java代码  

  1. import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
  2. import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
  3. @RestController
  4. public class GreetingController {
  5. private static final String template = "Hello, %s";
  6. private final AtomicLong counter = new AtomicLong();
  7. @RequestMapping("/greeting")
  8. public Greeting greeting(@RequestParam(value = "name", defaultValue = "world") String name) {
  9. Greeting greeting = new Greeting(counter.incrementAndGet(), String.format(template, name));
  10. GreetingController methodOn = methodOn(GreetingController.class);
  11. // GreetingController methodOn = DummyInvocationUtils.methodOn(GreetingController.class);
  12. Greeting greeting2 = methodOn.greeting(name);
  13. ControllerLinkBuilder linkTo = linkTo(greeting2);
  14. Link withSelfRel = linkTo.withSelfRel();
  15. greeting.add(withSelfRel);
  16. return greeting;
  17. }
  18. @RequestMapping("/show")
  19. public Greeting show(){
  20. RestTemplate template = new RestTemplate();
  21. Greeting greeting = template.getForObject("http://localhost:8080/greeting?name=323", Greeting.class);
  22. System.err.println(greeting);
  23. return greeting;
  24. }
  25. }

@restController注解表明里面的每个action都返回的不是view。

然后我们使用内置的Tomcat服务器部署,这个服务器的性能和你本机下载的绿色版是一样的

Java代码  

  1. @SpringBootApplication
  2. public class Application implements CommandLineRunner{
  3. public static void main(String[] args) {
  4. ConfigurableApplicationContext context =
  5. SpringApplication.run(Application.class, args);
  6. System.out.println("hohoho");
  7. String[] names = context.getBeanDefinitionNames();
  8. Arrays.sort(names);
  9. for (String string : names) {
  10. System.err.println(string);
  11. }
  12. }
  13. @Override
  14. public void run(String... args) throws Exception {
  15. RestTemplate template = new RestTemplate();
  16. Greeting greeting = template.getForObject("http://localhost:8080/greeting?name=323", Greeting.class);
  17. System.err.println(greeting);
  18. }
  19. }

接下来我们分步验收我们的成果(就算成果吧)。

首先运行main方法,在浏览器里访问http://localhost:8080/greeting,你应该能看到你想看到的;然后访问http://localhost:8080/greeting?name=WhoAmI,应该和你预料的也一样,都是返回的JSON串。每个串里都有当前的访问路径,这就是HATEAOS的作用,人们认为调用服务的时候路径拼接不对很影响开发效率就非要加上这个。

我们已经验证了web依赖和hateaos依赖工作正常,接下来看一下actuator。不知道你注意到没有,应用启动的时候输出了很多类似

Java代码  

  1. Mapped "{[/greeting],methods=[GET]}" onto ...
  2. Mapped "{[/env],methods=[GET]}" onto ...
  3. Mapped "{[/info],methods=[GET]}" onto ...
  4. 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下面。然后修改里面的代码,因为我们用不到它默认的测试方法

Java代码  

  1. @RunWith(SpringJUnit4ClassRunner.class)
  2. @SpringApplicationConfiguration(classes = MockServletContext.class)
  3. @WebAppConfiguration
  4. public class GreetingControllerTest {
  5. private MockMvc mvc;
  6. @Before
  7. public void setUp() {
  8. mvc = MockMvcBuilders.standaloneSetup(new GreetingController()).build();
  9. }
  10. @Test
  11. public void getHello() throws Exception {
  12. ResultActions actions = mvc.perform(MockMvcRequestBuilders.get("/greeting").accept(MediaType.APPLICATION_JSON));
  13. actions.andExpect(status().isOk());
  14. //      actions.andExpect(content().string(equalTo("Hello world")));
  15. }
  16. }

这里面用到了几个静态导入,eclipse对静态导入的处理简直令人发指,你可以copy进去:

Java代码  

  1. import static org.hamcrest.Matchers.equalTo;
  2. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
  3. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

运行它,应该可以通过。然后把最下面一行的注释去掉,也就是增加一个新断言,认为返回的内容是Hello world。这次一定通不过了。

最后我们看一下主运行文件里面的那个run方法

Java代码  

  1. @Override
  2. public void run(String... args) throws Exception {
  3. RestTemplate template = new RestTemplate();
  4. Greeting greeting = template.getForObject("http://localhost:8080/greeting?name=323", Greeting.class);
  5. System.err.println(greeting);
  6. }

看到上面的复写注解就知道它来自哪里了是吧,没错,就是实现的那个接口CommandLineRunner(所以完全可以不实现)。实现了这个接口的类(需要是一个bean,不过@SpringBootApplication注解有这个功能)在成功运行后会调用这个run方法。

我们在run中把返回的json重新组装成Greeting实例。为了更清晰,你最好给Greeting类增加

Java代码  

  1. @Override   public String toString()

这个能成功的关键是构造器的参数中使用了@JsonProperty注解,并且使用了value参数。你可以删掉试一下效果。

既然是web service,所以我们的最后一步就是打开CORS访问,不然异步访问不了。我不太明白为什么一个随时随地可以同步访问的地址在异步的时候非要限制。新建一个FIlter

Java代码  

  1. class SimpleCORSFilter implements Filter {
  2. @Override
  3. public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
  4. throws IOException, ServletException {
  5. HttpServletResponse response = (HttpServletResponse) res;
  6. response.setHeader("Access-Control-Allow-Origin", "*");
  7. response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");
  8. response.setHeader("Access-Control-Max-Age", "3600");
  9. response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  10. chain.doFilter(req, res);
  11. }

这个类实现了javax.servlet.Filter接口。既然我们没有了web.xml文件,怎么才能让它拦截请求呢?我们可以给这个类加上自动配置的注解,比如org.springframework.stereotype.Component或org.springframework.stereotype.Repository。

》》源码地址获取

springmvc + mybatis整合详细,及遇到的问题请参看以下资料:

参考资料:

http://www.springmvc,net/detail/6074493.html

http://my.spring.net/wangbiglei/blog/489583

http://my.springmvc.net/wangbiglei/blog/489604

时间: 2024-10-27 02:27:32

eclipse下SpringBoot开发和测试的相关文章

eclipse下java开发环境部署-maven

本人从事java开发多年,自从2012年接触maven,感觉有利有弊, 方便的地方大家都知道,程序上依赖那些软件包,只要在pom.xml里面写一段依赖的配置就好了 有时候程序庞大了,开发的人多了,如果对于依赖没有控制和管理,各自写一套,那么就会发现你依赖了很多不同版本的包,看起来很乱,对于有代码洁癖的我是无法忍受的. 本次搭建的环境主要是为了以后开发一些java相关的demo作为铺垫. 部署这么一套环境需要如下软件: jdk1.6.0_24 eclipse-jee-kepler-SR2-win3

一些基础的面试的java知识,普及下。开发和测试都用得到。

直接看代码吧. package gdk.ware; import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.Map.Entry; import org.testng.annotations.Test;//map的遍历@Testpublic class NewHashMap { static HashMap<String, String> map=new H

解决eclipse下android项目不能自动生成R.java文件

通常情况下R.java文件是项目建立时自动生成的.但是,大家在eclipse下做开发的时候偶尔会遇到R.java文件不能自动生成.现在就来解决这个问题. 1.eclipse ADT插件的版本与android SDK版本不对应 一般问题就出现在这儿,这样的情况只要把ADT插件和SDK都更新到最新,重启eclipse一切就OK了. 红框那儿要全部install到最新. 2.eclipse自己出问题(和你闹别扭,哈哈) 这样的你就clean一下你的项目,或者使用android工具fix下.R.java

Eclipse下开发Scala(DT大数据梦工厂)

本讲主要内容:环境安装.配置.本地模式.集群模式.自动化脚本.web状态监控 ==========单机============ 开发工具开发 下载最新版Scala For Eclipse 1.建立工程,修改scala编译版本 2.加入Spark1.6.0的jar文件依赖 下载 http://apache.opencas.org/spark/spark-1.6.0/spark-1.6.0-bin-hadoop2.6.tgz spark-assembly-1.6.0-hadoop2.6.0.jar

Mac OS10.9 下python开发环境(eclipse)以及自然语言包NLTK的安装与注意

折腾了大半天,终于把mbp上python自然语言开发环境搭建好了. 第一步,安装JDK1.7 for mac MacOS10.9是自带python2.7.5的,够用,具体的可以打开终端输入python显示版本号码.在10.9中MacOS没有自带的JDK1.7所以我们得先安装JDK1.7 for mac 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 选择Mac OS

Eclipse下配置j2ee开发环境及与MySQL数据库的连接

Eclipse下配置j2ee开发环境 a.配置tomcat  windows->perferences->server->server runtime environments->Add…… b.installes JREs,然后点击Add 默认的standard VM就可以,点击next,然后点击directory 选择本机jdk安装的路径,finish. 与MySQL数据库的连接 与数据库连接要做的事情就是要用jdbc 首先要下载jdbc,在官网上下载,在将其mysql-con

在Eclipse下搭建Android开发环境教程

我们昨天向各位介绍了<在NetBeans上搭建Android SDK环境>,前不久也介绍过<在MyEclipse 8.6上搭建Android开发环境>, 都受到了读者的欢迎.但是很多朋友都认为NetBeans在中国用户不多,MyEclipse又是收费产品,都没有Eclipse好,很多读者都希望我们 介绍一下Eclipse下搭建的Android开发环境,本文将全程演示Android开发环境的搭建过程,无需配置环境变量.所有软件都是写该文章时最 新版本,希望大家喜欢. 一 相关下载 (

eclipse下搭建shell脚本编辑器--安装开发shell的eclipse插件shelled

eclipse下搭建shell脚本编辑器--安装开发shell的eclipse插件shelled 1.安装"man-page viewer"插件(ShellEd需要,有的机器不需要,先装上) 安装地址:http://download.eclipse.org/technology/linuxtools/updates-nightly/ 2.安装"shelled"插件 在http://sourceforge.net/projects/shelled/files/late

spark-windows(含eclipse配置)下本地开发环境搭建

spark-windows(含eclipse配置)下本地开发环境搭建   >>>>>>注意:这里忽略JDK的安装,JDK要求是1.8及以上版本,请通过 java  –version查看. 一.spark命令行环境搭建 Step1:安装Spark 到官网http://spark.apache.org/downloads.html选择相应版本,下载安装包.我这里下的是2.1.3版本,后面安装的Hadoop版本需要跟Spark版本对应.下载后找个合适的文件夹解压即可.这里新建