上期我们完成了Spring boot 项目的搭建,本期我们实现一个简单的接口服务。
一 、创建一个简单的服务
首先需再pom文件中引入
spring-boot-starter-web
无论是Spring MVC还是Restful风格的接口服务,spring-boot-starter-web
中都包含其注解@RestController
或@Controller
注意:由于
spring-boot-starter-web
默认替我们引入了核心启动器spring-boot-starter
,因此,当Spring Boot
项目中的pom.xml
引入了spring-boot-starter-web
的依赖后,就无须在引入spring-boot-starter
核心启动器的依赖了
1. 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.6</version>
<scope>compile</scope>
</dependency>
2. 创建DTO对象
创建接口传输对象UserDto,代码如下:
package com.holmium.springboot.app.dto;
/**
* @author holmium
* @description: 用户对象
* @date 2023年04月15日
*/
public class UserDto {
/**
* 用户ID
*/
String userId;
/**
* 用户名
*/
String userName;
/**
* 性别
*/
String sex;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
3. 创建接口类UserApi
创建接口类UserApi.java,实现一个restful风格的API接口
package com.holmium.springboot.app.api;
import com.holmium.springboot.app.dto.UserDto;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
1. @author holmium
2. @description:
3. @date 2023年04月14日11:50
*/
@RestController
public class UserApi {
@GetMapping(value = "/userinfo")
public UserDto gerUserInfo() {
UserDto user = new UserDto();
user.setUserId("888888");
user.setUserName("holmium");
user.setSex("1");
return user;
}
}
4. 启动工程通过API测试工具访问:
到这里,我们第一个简单的接口就完成了。
二、接口返回结果格式进行统一
从上述接口返回结果可以看到,接口返回的数据使我们自己定义的对象,所以每个接口返回的结果格式都不尽相同,这样给接口使用者带来一定困扰,我们可不可以对定义一个统一格式的返回结果?答案是肯定。
1. 首先,我们创建一个统一返回结果对象Result
package com.holmium.springboot.common.resp;
/**
1. @author holmium
2. @description 统一的返回结果
3. @date 2023年04月15日15:11
*/
public class Result<T>{
/**
* 请求响应代码,如:001-成功,000-失败
*/
private String code;
/**
* 请求返回信息描述或异常信息
*/
private String message;
/**
*接口请求返回业务对象数据
*/
private T data;
public Result() {
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
2. 第二步,我们对UserApi返回结果进行改造
package com.holmium.springboot.app.api;
import com.holmium.springboot.app.dto.UserDto;
import com.holmium.springboot.app.resp.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author holmium
* @description:
* @date 2023年04月15日23:50
*/
@RestController
public class UserApi {
@GetMapping(value = "/userinfo")
public Result<UserDto> gerUserInfo() {
//接口返回数据对象
UserDto user = new UserDto();
user.setUserId("888888");
user.setUserName("holmium");
user.setSex("1");
//接口统一返回结果
Result<UserDto> result = new Result<>();
result.setData(user);
result.setCode("001");
result.setMessage("接口调用成功");
return result;
}
}
3. 调整后返回结果如下:
三、调用接口异常进行统一封装返回
1. 添加异常处理
package com.holmium.springboot.app.api;
import com.holmium.springboot.app.vo.UserVo;
import com.holmium.springboot.common.enums.CodeEnum;
import com.holmium.springboot.common.resp.Result;
import com.holmium.springboot.domain.user.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author holmium
* @description:
* @date 2023年04月15日23:50
*/
@RestController
public class UserApi {
@Resource
User user;
@GetMapping(value = "/userinfo")
public Result<UserVo> gerUserInfo(@RequestParam("id") Long id) {
//接口统一返回结果
Result<UserVo> result = new Result<>();
if(id==1) {
//接口返回数据对象
UserVo user = new UserVo();
user.setUserId("888888");
user.setUserName("holmium");
user.setSex("1");
result.setData(user);
result.setCode(CodeEnum.SUCCESS.getCode());
result.setMessage(CodeEnum.SUCCESS.getMessage());
}else{
try {
user.getUser();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return result;
}
}
2.测试结果
四、引入lombok,简化对象写法
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
/**
* @author holmium
* @description: 用户对象
* @date 2023年04月14日11:44
*/
@Data //增加@Data注解,简化get和set方法
public class UserVo {
/**
* 用户ID
*/
String userId;
/**
* 用户名
*/
String userName;
/**
* 性别:1-男 0-女
*/
String sex;
}
五、总结
到这里,我们第一个接口服务开发完毕