eclipse下SpringBoot开发和测试

简介: SpringBoot是快速开发企业应用的一条捷径,尤其是在Spring4以后,项目完全不需要xml配置以来,让开发者感到巨大的流畅感。 我们使用Eclipse搭建一个基于maven的SpringBoot项目,不了解的可以看一下《用maven搭建springboot环境》。

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

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

 

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

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

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

        
		org.springframework.boot
		spring-boot-starter-parent
		1.2.6.RELEASE
	

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

  
      
      
          
            spring-snapshots  
            http://repo.spring.io/snapshot  
            true  
          
          
            spring-milestones  
            http://repo.spring.io/milestone  
          
      
      
          
            spring-snapshots  
            http://repo.spring.io/snapshot  
          
          
            spring-milestones  
            http://repo.spring.io/milestone  
          
     

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

                
			org.springframework.boot
			spring-boot-starter-test
			test
		
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.springframework.hateoas
			spring-hateoas
		
		
			org.springframework.boot
			spring-boot-starter-actuator
		

 第一个是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。

 

 

目录
相关文章
|
3天前
|
人工智能 自然语言处理 测试技术
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
Potpie.ai 是一个基于 AI 技术的开源平台,能够为代码库创建定制化的工程代理,自动化代码分析、测试和开发任务。
93 19
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
|
7天前
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
51 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
5天前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
29 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
1月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
36 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
23天前
|
监控 Java 应用服务中间件
SpringBoot是如何简化Spring开发的,以及SpringBoot的特性以及源码分析
Spring Boot 通过简化配置、自动配置和嵌入式服务器等特性,大大简化了 Spring 应用的开发过程。它通过提供一系列 `starter` 依赖和开箱即用的默认配置,使开发者能够更专注于业务逻辑而非繁琐的配置。Spring Boot 的自动配置机制和强大的 Actuator 功能进一步提升了开发效率和应用的可维护性。通过对其源码的分析,可以更深入地理解其内部工作机制,从而更好地利用其特性进行开发。
42 6
|
26天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
38 2
|
26天前
|
小程序 前端开发 关系型数据库
uniapp跨平台框架,陪玩系统并发性能测试,小程序源码搭建开发解析
多功能一体游戏陪练、语音陪玩系统的开发涉及前期准备、技术选型、系统设计与开发及测试优化。首先,通过目标用户分析和竞品分析明确功能需求,如注册登录、预约匹配、实时语音等。技术选型上,前端采用Uni-app支持多端开发,后端选用PHP框架确保稳定性能,数据库使用MySQL保证数据一致性。系统设计阶段注重UI/UX设计和前后端开发,集成WebSocket实现语音聊天。最后,通过功能、性能和用户体验测试,确保系统的稳定性和用户满意度。
|
30天前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
41 5
|
30天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
56 2
|
1月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。

热门文章

最新文章

推荐镜像

更多