项目文件结构
编写示例代码
- 添加lombok的依赖
- 新建DemoController,用于提供RESTful接口。增加相关注解:@RestController,@RequestMapping("/demo"),@Slf4j
- 新建GetUserParam,接口传入参数实体。
- 新建DemoErrorEnum,接口返回消息和返回消息码的枚举
public enum DemoErrorEnum {
SUCCESS("操作成功", "0000"),
PARAM_NULL("参数为空", "1001"),
TOKEN_EXPIRED("token已过期", "2007"),
SERVER_ERROR("服务器异常,请稍后重试", "5001"),
;
private String code;
private String message;
public String getCode() {
return code;
}
public String getMessage() {
return message;
}
DemoErrorEnum(String message, String code) {
this.message = message;
this.code = code;
}
public static String getErrorMsg(String code) {
for (DemoErrorEnum e : DemoErrorEnum.values()) {
if (e.getCode().equals(code)) {
return e.message;
}
}
return null;
}
}
- 新建ResultDTO,作为接口返回基类。增加相关注解:@Data,@Accessors(chain = true)。
- success:接口是否调用成功
- resultMessage:调用结果描述
- resultCode:调用结果消息码
- result:调用返回的数据
- 定义一个static的error方法,当接口失败的时候,可以直接返回一个error方法,方法内部构造具体的返回消息码和结果描述。入参为一个DemoErrorEnum的枚举。
- 定义一个static的success方法,当接口成功的时候,可以直接返回一个success方法,方法内部构造具体的返回信息,入参也是一个DemoErrorEnum的枚举。编写一个重载方法,入参为空,方法内部构造默认的响应信息。
import com.naylor.interfacedesign.domain.demo.error.DemoErrorEnum;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@Accessors(chain = true)
public class ResultDTO implements Serializable {
private boolean success;
private String resultMessage;
private String resultCode;
private T result;
public static ResultDTO error(DemoErrorEnum errorEnum) {
return new ResultDTO().setSuccess(false).setResultMessage(errorEnum.getMessage()).setResultCode(errorEnum.getCode());
}
public static ResultDTO success(DemoErrorEnum errorEnum) {
return new ResultDTO().setSuccess(true).setResultCode(errorEnum.getCode());
}
public static ResultDTO success() {
return new ResultDTO().setSuccess(true).setResultCode(DemoErrorEnum.SUCCESS.getCode()).setResultMessage(DemoErrorEnum.SUCCESS.getMessage());
}
}
- 新建UserDTO,接口返回的具体信息
- DemoController中新建getUser方法,入参为GetUserParam,返回值为ResultDTO。此接口内部逻辑大致是三部分
- 检验传入的参数是否合法
- 调用service处理具体的业务逻辑
- 检验和组装service返回的结果,并以此为依据向接口调用者返回信息。
import com.naylor.interfacedesign.domain.demo.controller.param.GetUserParam;
import com.naylor.interfacedesign.domain.demo.dto.ResultDTO;
import com.naylor.interfacedesign.domain.demo.dto.UserDTO;
import com.naylor.interfacedesign.domain.demo.error.DemoErrorEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/demo")
@Slf4j
public class DemoController {
@GetMapping("/user")
public ResultDTO getUser(GetUserParam param) {
if (null == param) {
return ResultDTO.error(DemoErrorEnum.PARAM_NULL);
}
UserDTO userDTO = null;
// do something
return null != userDTO ? ResultDTO.success().setResult(userDTO) : ResultDTO.error(DemoErrorEnum.SERVER_ERROR);
}
}