1. Idea新建Grande项目
依次点击菜单File->New->Project, 新建项目,选择Gradle,如下图勾选Java和Web两个选项,点击Next按钮进行下一步
设置项目的名字,本例名为gradle_mvc
点击Finish完成设置,项目开始创建,等待项目创建完成。
2.添加依赖
编辑build.gradle文件, 在dependencies内添加spring-webmvc的依赖:
implementation 'org.springframework:spring-webmvc:5.3.10'
保存并点击Gradle面板中的Reload按钮,重新加载依赖,最终可以看到如图所示依赖情况。
3.添加mvc相关文件
文件结构如下:
①首先添加一个Controller:
package cn.flylolo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author FlyLolo
* @date 2021/10/9 16:42
*/
@RestController
@RequestMapping("user")
public class UserController {
@GetMapping("")
public String helloWorld(){
return "Hello World!";
}
}
②在resources目录下新建springmvc.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="cn.flylolo"/>
<mvc:annotation-driven />
<mvc:default-servlet-handler />
</beans>
③webapp目录下新建WEB-INF文件夹,其中新建web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--配置springmvc核心servlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
4. 项目设置
打开File->Project Struture设置,
选择带"exploded"后缀的,修改图中方框中的内容:
Name比较长,可以自行修改,不改也可以,本例改为gradlemvc
Output directory自动生成的路径有问题,去掉"exploded", 例如本例改为:F:\gradle_mvc\build\libs\gradle_mvc-1.0-SNAPSHOT.war。
5.配置Tomcat
配置Tomcat服务,打开Run/Debug Configuration, 点击左上角的加号,选择Tomcat Server->Local。
HTTP prot默认为8080,若已被使用则改为其他的端口。
选择artifacts,点击右下角的Fix按钮,跳转到Deployment标签,选择刚刚配置的gradlemvc。
保存并启动项目,访问HelloController,地址:http://localhost:8081/gradlemvc/user
6.添加json解析:
如果只是返回String类型是没问题了,但大多数需要返回的时候Json类型。
新建一个User类:
package cn.flylolo.model;
import lombok.Data;
/**
* @author FlyLolo
* @date 2021/10/11 11:18
*/
@Data
public class User {
private String userId;
private String userName;
}
这里用到了lombok,需要在build.gradle中添加引用。
implementation 'org.projectlombok:lombok:1.18.20'
annotationProcessor 'org.projectlombok:lombok:1.18.20'
注意需要添加第二行,否则在调用对应的get和set方法的时候会出现 “错误: 找不到符号”的错误。
在UserController中添加新的方法:
@GetMapping("/{userId}")
public User getName(@PathVariable String userId){
User user = new User();
user.setUserId(userId);
user.setUserName(userId + "的名字");
return user;
}
将返回一个User对象。
访问http://localhost:8081/gradlemvc/user/testid,返回了406,不可接收错误。
因为返回Json类型,需要添加对应的message-converters
,本例采用FastJson。用下面代码替换springmvc.xml中的<mvc:annotation-driven />
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<!-- 配置Fastjson支持 -->
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json</value>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
这需要在build.gradle中添加FastJson的引用:
implementation 'com.alibaba:fastjson:1.2.78'
再次访问http://localhost:8081/gradlemvc/user/testid,得到了期望的结果。