在之前的文章 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)。为什么下载旧版本

IntelliJ IDEA 创建 Java Web 项目_java

新建 Java Web 项目

File -> New -> Project...

之后选择 Spring Initialzr,为了保持一致,Project SDK 选择了版本 11Java 版本选择了 11,如下图:

IntelliJ IDEA 创建 Java Web 项目_Java_02

点击 next 进行下一步的选择:

IntelliJ IDEA 创建 Java Web 项目_前端_03

我们选择 Spring Boot 的版本是 2.7.2,然后勾选 Web -> Spring Web,点击 Finish 按钮完成创建项目。

Spring Boot 的版本读者根据情况进行选择。

编写案例

我们根据上面的步骤,创建了一个名为 chapter1-1 的项目。创建后,项目结构如下:

IntelliJ IDEA 创建 Java Web 项目_spring_04

  • 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";
    }
}

IntelliJ IDEA 创建 Java Web 项目_Java_05

控制台告诉了我们 - Tomcat initialized with port(s): 8080 (http)。此时,浏览器打开 http://localhost:8080/jimmy,会出现内容:

IntelliJ IDEA 创建 Java Web 项目_前端_06

浏览器打开 http://localhost:8080/jimmy/hello,就会出现其对应的返回内容:

IntelliJ IDEA 创建 Java Web 项目_前端_07

疑问:那么我们要更改端口号路径前缀呢?

我们可以在文件 main/java/resources/application.properties 中配置:

# port
server.port = 9000
# path prefix, default /
server.servlet.context-path = /demo

重新启动项目之后,我们可以通过 http://localhost:8080/demo/jimmyhttp://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 做了测试,检测其返回的状态和返回值是否都是预期。然后我们运行该文件,测试通过。

IntelliJ IDEA 创建 Java Web 项目_Java_08

IntelliJ IDEA 创建 Java Web 项目_前端_09

参考

  • IntelliJ IDEA Versions
  • Spring Boot 2.x基础教程:快速入门
  • spring boot修改context path