在之前的文章 Mac 中 VSCode 上编写 Java 中,我们使用了 IDE - VSCode
进行 Java
的知识点学习。
本文,我们用更加专业的 IDE - IntelliJ IDEA
来加速我们的项目开发。我们将基于 Spring Boot
创建 Java Web
项目。
安装
本人的开发环境如下:
mac m1
java
版本V11.0.12
javac
版本V11.0.12
笔者通过 idea version 下载了版本 2021.2.2
的开发工具 - 「IntelliJ IDEA Ultimate」2021.2.2 - macOS Apple Silicon(dmg)
。为什么下载旧版本,还不是因为不用付费,读者感兴趣可以看文末参考。
新建 Java Web 项目
File -> New -> Project...
之后选择 Spring Initialzr
,为了保持一致,Project SDK
选择了版本 11
,Java
版本选择了 11
,如下图:
点击 next
进行下一步的选择:
我们选择 Spring Boot
的版本是 2.7.2
,然后勾选 Web -> Spring Web
,点击 Finish
按钮完成创建项目。
Spring Boot
的版本读者根据情况进行选择。
编写案例
我们根据上面的步骤,创建了一个名为 chapter1-1
的项目。创建后,项目结构如下:
main
文件夹下项目的开发资料test
文件夹下编写测试
我们在 main/java/conm.example.chapter11
下添加个 HelloContrller.java
文件(跟 Chapter11Application.java
同级)。添加代码如下:
package com.example.chapter11;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/jimmy")
public class HelloController {
@RequestMapping("")
public String index() {
return "Jimmy";
}
@RequestMapping("/hello")
public String hello() {
return "Hello World";
}
}
控制台告诉了我们 - Tomcat initialized with port(s): 8080 (http)
。此时,浏览器打开 http://localhost:8080/jimmy
,会出现内容:
浏览器打开 http://localhost:8080/jimmy/hello
,就会出现其对应的返回内容:
疑问:那么我们要更改端口号和路径前缀呢?
我们可以在文件 main/java/resources/application.properties
中配置:
# port
server.port = 9000
# path prefix, default /
server.servlet.context-path = /demo
重新启动项目之后,我们可以通过 http://localhost:8080/demo/jimmy
和 http://localhost:8080/demo/jimmy/hello
访问上面的两个内容。
测试
我们在 test/java/com.example.chapter11/Chapter11ApplicationTests.java
编写测试文件如下:
package com.example.chapter11;
import org.junit.Before;
import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
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;
@SpringBootTest
public class Chapter11ApplicationTests {
private MockMvc mvc;
@Before
public void setUp() {
mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
}
@Test
public void getHello() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/jimmy/hello").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string(equalTo("Hello World")));
}
}
上面代码中,我们只是对 /jimmy/hello
做了测试,检测其返回的状态和返回值是否都是预期。然后我们运行该文件,测试通过。