微服务接口规范是指controller层的规范
controller的功能应该有以下五点:
1.参数校验
2.调用service层接口实现业务逻辑
3.转换业务/数据对象
4.组装返回对象
5.异常处理
- 定义状态码枚举类
StatusEnum.java
package com.wd.cloud.commons.enums;
import org.springframework.lang.Nullable;
/**
* @author He Zhigang
* @date 2018/10/10
* @Description:
*/
public enum StatusEnum {
/**
* 未知异常
*/
UNKNOWN(-1, "unknow exception"),
/**
* 成功
*/
SUCCESS(1, "successed"),
/**
* 失败
*/
FAIL(0, "failed"),
/**
* HTTP状态码
*/
CONTINUE(100, "Continue"),
SWITCHING_PROTOCOLS(101, "Switching Protocols"),
PROCESSING(102, "Processing"),
CHECKPOINT(103, "Checkpoint"),
OK(200, "OK"),
CREATED(201, "Created"),
ACCEPTED(202, "Accepted"),
NON_AUTHORITATIVE_INFORMATION(203, "Non-Authoritative Information"),
NO_CONTENT(204, "No Content"),
RESET_CONTENT(205, "Reset Content"),
PARTIAL_CONTENT(206, "Partial Content"),
MULTI_STATUS(207, "Multi-Status"),
ALREADY_REPORTED(208, "Already Reported"),
IM_USED(226, "IM Used"),
MULTIPLE_CHOICES(300, "Multiple Choices"),
MOVED_PERMANENTLY(301, "Moved Permanently"),
FOUND(302, "Found"),
/**
* @deprecated
*/
@Deprecated
MOVED_TEMPORARILY(302, "Moved Temporarily"),
SEE_OTHER(303, "See Other"),
NOT_MODIFIED(304, "Not Modified"),
/**
* @deprecated
*/
@Deprecated
USE_PROXY(305, "Use Proxy"),
TEMPORARY_REDIRECT(307, "Temporary Redirect"),
PERMANENT_REDIRECT(308, "Permanent Redirect"),
BAD_REQUEST(400, "Bad Request"),
UNAUTHORIZED(401, "Unauthorized"),
PAYMENT_REQUIRED(402, "Payment Required"),
FORBIDDEN(403, "Forbidden"),
NOT_FOUND(404, "Not Found"),
METHOD_NOT_ALLOWED(405, "Method Not Allowed"),
NOT_ACCEPTABLE(406, "Not Acceptable"),
PROXY_AUTHENTICATION_REQUIRED(407, "Proxy Authentication Required"),
REQUEST_TIMEOUT(408, "Request Timeout"),
CONFLICT(409, "Conflict"),
GONE(410, "Gone"),
LENGTH_REQUIRED(411, "Length Required"),
PRECONDITION_FAILED(412, "Precondition Failed"),
PAYLOAD_TOO_LARGE(413, "Payload Too Large"),
/**
* @deprecated
*/
@Deprecated
REQUEST_ENTITY_TOO_LARGE(413, "Request Entity Too Large"),
URI_TOO_LONG(414, "URI Too Long"),
/**
* @deprecated
*/
@Deprecated
REQUEST_URI_TOO_LONG(414, "Request-URI Too Long"),
UNSUPPORTED_MEDIA_TYPE(415, "Unsupported Media Type"),
REQUESTED_RANGE_NOT_SATISFIABLE(416, "Requested range not satisfiable"),
EXPECTATION_FAILED(417, "Expectation Failed"),
I_AM_A_TEAPOT(418, "I'm a teapot"),
/**
* @deprecated
*/
@Deprecated
INSUFFICIENT_SPACE_ON_RESOURCE(419, "Insufficient Space On Resource"),
/**
* @deprecated
*/
@Deprecated
METHOD_FAILURE(420, "Method Failure"),
/**
* @deprecated
*/
@Deprecated
DESTINATION_LOCKED(421, "Destination Locked"),
UNPROCESSABLE_ENTITY(422, "Unprocessable Entity"),
LOCKED(423, "Locked"),
FAILED_DEPENDENCY(424, "Failed Dependency"),
UPGRADE_REQUIRED(426, "Upgrade Required"),
PRECONDITION_REQUIRED(428, "Precondition Required"),
TOO_MANY_REQUESTS(429, "Too Many Requests"),
REQUEST_HEADER_FIELDS_TOO_LARGE(431, "Request Header Fields Too Large"),
UNAVAILABLE_FOR_LEGAL_REASONS(451, "Unavailable For Legal Reasons"),
INTERNAL_SERVER_ERROR(500, "Internal Server Error"),
NOT_IMPLEMENTED(501, "Not Implemented"),
BAD_GATEWAY(502, "Bad Gateway"),
SERVICE_UNAVAILABLE(503, "Service Unavailable"),
GATEWAY_TIMEOUT(504, "Gateway Timeout"),
HTTP_VERSION_NOT_SUPPORTED(505, "HTTP Version not supported"),
VARIANT_ALSO_NEGOTIATES(506, "Variant Also Negotiates"),
INSUFFICIENT_STORAGE(507, "Insufficient Storage"),
LOOP_DETECTED(508, "Loop Detected"),
BANDWIDTH_LIMIT_EXCEEDED(509, "Bandwidth Limit Exceeded"),
NOT_EXTENDED(510, "Not Extended"),
NETWORK_AUTHENTICATION_REQUIRED(511, "Network Authentication Required"),
/**
* 数据库异常状态码
*/
DB_EXCEPTION(1001, "数据库异常"),
DB_PRIMARY_EXCEPTION(1002, "主键冲突"),
private final int value;
private final String message;
private StatusEnum(int value, String message) {
this.value = value;
this.message = message;
}
public static StatusEnum valueOf(int statusCode) {
StatusEnum status = resolve(statusCode);
if (status == null) {
throw new IllegalArgumentException("No matching constant for [" + statusCode + "]");
} else {
return status;
}
}
@Nullable
public static StatusEnum resolve(int statusCode) {
StatusEnum[] statusEnums = values();
for (StatusEnum statusEnum : statusEnums) {
if (statusEnum.value == statusCode) {
return statusEnum;
}
}
return null;
}
public int value() {
return value;
}
public String getMessage() {
return message;
}
@Override
public String toString() {
return Integer.toString(this.value);
}
}
- 定义API统一返回对象
ResponseModel.java
package com.wd.cloud.commons.model;
import com.wd.cloud.commons.enums.StatusEnum;
import java.io.Serializable;
/**
* @author He Zhigang
* @date 2018/5/3
* @remark api返回的response对象
*/
public class ResponseModel<T> implements Serializable {
/**
* 是否失败?error==true?失败:成功;
*/
private boolean error;
private Integer status;
private String message;
private T body;
public ResponseModel(){}
private ResponseModel(Throwable e) {
this.error = true;
this.message = e.toString();
this.status = StatusEnum.FAIL.value();
}
private ResponseModel(StatusEnum statusEnum, boolean error) {
this.error = error;
this.status = statusEnum.value();
this.message = statusEnum.getMessage();
}
public static ResponseModel ok() {
return new ResponseModel(StatusEnum.SUCCESS, false);
}
public static ResponseModel ok(StatusEnum statusEnum) {
return new ResponseModel(statusEnum, false);
}
/**
* 请求失败,默认StatusEnum.FAIL
*
* @return
*/
public static ResponseModel fail() {
return new ResponseModel(StatusEnum.FAIL, true);
}
/**
* 请求失败
*
* @param statusEnum
* @return
*/
public static ResponseModel fail(StatusEnum statusEnum) {
return new ResponseModel(statusEnum, true);
}
public static ResponseModel fail(Throwable e) {
return new ResponseModel(e);
}
public static ResponseModel serverError() {
return new ResponseModel(StatusEnum.INTERNAL_SERVER_ERROR, true);
}
public Integer status() {
return status;
}
public ResponseModel<T> status(Integer status) {
this.status = status;
return this;
}
public String message() {
return message;
}
public ResponseModel<T> message(String message) {
this.message = message;
return this;
}
public T body() {
return body;
}
public ResponseModel<T> body(T body) {
this.body = body;
return this;
}
public boolean isError() {
return error;
}
public ResponseModel<T> setError(boolean error) {
this.error = error;
return this;
}
}
网友评论