Commit 06395cc3 by 张付兵

增加违法举报图片上传接口

parent 950e11fa
package com.hikcreate.ftp.proxy.base.exception;
import com.hikcreate.ftp.proxy.base.statuscode.IStatusCode;
import com.hikcreate.ftp.proxy.base.statuscode.StatusCode;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class BusinessException extends RuntimeException {
private long code; // 状态码
private String msg; // 消息
private String errorMsg; // 错误消息
private Object param; // 附加参数
public BusinessException(IStatusCode sc) {
super();
set(sc.getCode(), sc.getMsg(), sc.getMsg());
}
public BusinessException(String msg, String errorMsg) {
super();
set(StatusCode.SYSTEM_ERROR.getCode(), msg, errorMsg);
}
public BusinessException(IStatusCode sc, String msg) {
super();
set(sc.getCode(), msg, msg);
}
public BusinessException(IStatusCode sc, String msg, String errorMsg) {
super();
set(sc.getCode(), msg, errorMsg);
}
public BusinessException(Throwable throwable) {
super(throwable);
if (throwable instanceof BusinessException) {
BusinessException cast = (BusinessException) throwable;
set(cast.code, cast.msg, cast.errorMsg);
setParam(cast.param);
} else {
set(StatusCode.SYSTEM_ERROR.getCode(), StatusCode.SYSTEM_ERROR.getMsg(), throwable.toString());
}
}
public BusinessException(Throwable throwable, IStatusCode sc, String msg) {
super(throwable);
set(sc.getCode(), msg, msg);
}
public BusinessException(long code, String msg) {
super();
set(code, msg, msg);
}
public BusinessException(String msg) {
super();
set(StatusCode.BUSINESS_ERROR.getCode(), msg, msg);
}
public BusinessException setParam(Object param) {
this.param = param;
return this;
}
@Override
public String getMessage() {
StringBuilder sb = new StringBuilder();
sb.append(code);
if (msg != null) {
sb.append(", msg=").append(msg);
}
if (errorMsg != null) {
sb.append(", errorMsg=").append(errorMsg);
}
if (param != null) {
sb.append(", param=").append(param);
}
return sb.toString();
}
@Override
public String toString() {
return this.getClass().getName() + ":" + getMessage();
}
private void set(long code, String msg, String errorMsg) {
this.code = code;
this.msg = msg;
this.errorMsg = errorMsg;
}
}
package com.hikcreate.ftp.proxy.base.exception;
import com.hikcreate.ftp.proxy.base.response.Response;
import com.hikcreate.ftp.proxy.base.response.ResponseGenerator;
import com.hikcreate.ftp.proxy.base.statuscode.StatusCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.List;
/**
* 统一异常处理
*
* @author zhangfubing
*/
@Slf4j
@ControllerAdvice
public class DefaultExceptionHandler {
@ExceptionHandler(value = BindException.class)
@ResponseBody
public Response<Void> handle(BindException e) {
BindingResult bindingResult = e.getBindingResult();
String errorMessage = buildErrorMessage(bindingResult);
log.error(errorMessage);
FieldError fieldError = e.getFieldError();
String message = fieldError.getDefaultMessage();
return ResponseGenerator.fail(StatusCode.PARAM_ERROR.getCode(), message, errorMessage);
}
/**
* 可能原因:@Validated 注解的对象验证不通过
*
* @param e
* @return
*/
@ExceptionHandler(value = MethodArgumentNotValidException.class)
@ResponseBody
public Response<Void> handle(MethodArgumentNotValidException e) {
BindingResult bindingResult = e.getBindingResult();
String errorMessage = buildErrorMessage(bindingResult);
log.error(errorMessage);
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
String message = "参数错误";
if (null != fieldErrors && fieldErrors.size() > 0) {
FieldError fieldError = fieldErrors.get(0);
if (null != fieldError) {
message = fieldError.getDefaultMessage();
}
}
return ResponseGenerator.fail(StatusCode.PARAM_ERROR.getCode(), message, errorMessage);
}
/**
* 服务类异常
*
* @param e 异常对象
* @return 接口返回对象
*/
@ExceptionHandler(BusinessException.class)
@ResponseBody
public Response<Void> handle(BusinessException e) {
log.error(e.toString(), e);
return ResponseGenerator.fail(e.getCode(), e.getMsg(), e.getErrorMsg());
}
/**
* 其他异常
*
* @param e 异常对象
* @return 接口返回对象
*/
@ExceptionHandler(Throwable.class)
@ResponseBody
public Response<Void> handle(Throwable e) {
log.error(e.toString(), e);
return ResponseGenerator.fail(StatusCode.SYSTEM_ERROR, getStackTrace(e));
}
/**
* 从{@code @BindingResult}中构建异常信息
* on field 'verifyCode': null];
*
* @param bindingResult
*/
private String buildErrorMessage(BindingResult bindingResult) {
StringBuffer sb = new StringBuffer("BindException. ");
sb.append("Field error in object '" + bindingResult.getObjectName() + "'. [" + bindingResult.getTarget() + "]");
bindingResult.getFieldErrors()
.forEach(error -> {
sb.append("\r\n on field '" + error.getField() + "': ");
sb.append("rejected value [" + error.getRejectedValue() + "]. ");
sb.append("default message [" + error.getDefaultMessage() + "]");
});
return sb.toString();
}
/**
* 获取异常对象的堆栈信息
*
* @param throwable 异常对象
* @return 堆栈信息
*/
protected String getStackTrace(Throwable throwable) {
StringWriter sw = new StringWriter();
try (PrintWriter pw = new PrintWriter(sw)) {
throwable.printStackTrace(pw);
return sw.toString();
}
}
}
package com.hikcreate.ftp.proxy.base.response;
import com.hikcreate.ftp.proxy.base.exception.BusinessException;
import com.hikcreate.ftp.proxy.base.statuscode.StatusCode;
import lombok.Data;
/**
* 统一的返回结果,作为服务间进行通信的数据协议。<br/>
* code表示状态码,不同服务不同接口会返回不同的状态码<br/>
* msg表示返回的结果信息描述<br/>
* errorMsg表示返回的错误结果信息描述<br/>
* data作为泛型参数类型,在不同接口可以定义不同的类型
*
* @param <T> 数据泛型类型
*/
@Data
public class Response<T> {
/**
* 成功标记
*/
private boolean success = true;
/**
* 状态码
*/
private long code = StatusCode.SUCCESS.getCode();
/**
* 描述
*/
private String msg = StatusCode.SUCCESS.getMsg();
/**
* 错误描述
*/
private String errorMsg = StatusCode.SUCCESS.getMsg();
/**
* 挂载数据
*/
private T data;
public Response<T> fallback() {
return fallback(code, msg);
}
public Response<T> fallback(String msg) {
return fallback(code, msg);
}
public Response<T> fallback(long code) {
return fallback(code, msg);
}
/**
* 失败时抛出业务异常
*
* @param code 状态码
* @param msg 描述
* @return 当前对象
*/
public Response<T> fallback(long code, String msg) {
if (!success) {
BusinessException ex = new BusinessException(code, msg);
ex.setErrorMsg(errorMsg);
throw ex;
}
return this;
}
}
package com.hikcreate.ftp.proxy.base.response;
import com.hikcreate.ftp.proxy.base.statuscode.IStatusCode;
import com.hikcreate.ftp.proxy.base.statuscode.StatusCode;
public class ResponseGenerator {
public static <T> Response<T> success() {
return new Response<>();
}
public static <T> Response<T> success(String msg, T data) {
Response<T> response = new Response<>();
response.setMsg(msg);
response.setData(data);
return response;
}
public static <T> Response<T> success(T data) {
Response<T> response = new Response<>();
response.setData(data);
return response;
}
public static <T> Response<T> success4Msg(String msg) {
Response<T> response = new Response<>();
response.setMsg(msg);
return response;
}
public static <T> Response<T> fail(String msg) {
Response<T> response = new Response<>();
response.setSuccess(false);
response.setCode(StatusCode.BUSINESS_ERROR.getCode());
response.setMsg(msg);
response.setErrorMsg(msg);
return response;
}
public static <T> Response<T> fail(IStatusCode statusCode) {
Response<T> response = new Response<>();
response.setSuccess(false);
response.setCode(statusCode.getCode());
response.setMsg(statusCode.getMsg());
response.setErrorMsg(statusCode.getMsg());
return response;
}
public static <T> Response<T> fail(long code, String msg) {
Response<T> response = new Response<>();
response.setSuccess(false);
response.setCode(code);
response.setMsg(msg);
response.setErrorMsg(msg);
return response;
}
public static <T> Response<T> fail(long code, String msg, T data) {
Response<T> response = new Response<>();
response.setSuccess(false);
response.setCode(code);
response.setMsg(msg);
response.setErrorMsg(msg);
response.setData(data);
return response;
}
public static <T> Response<T> fail(String msg, String errorMsg) {
Response<T> response = new Response<>();
response.setSuccess(false);
response.setCode(StatusCode.BUSINESS_ERROR.getCode());
response.setMsg(msg);
response.setErrorMsg(errorMsg);
return response;
}
public static <T> Response<T> fail(IStatusCode statusCode, String errorMsg) {
Response<T> response = new Response<>();
response.setSuccess(false);
response.setCode(statusCode.getCode());
response.setMsg(statusCode.getMsg());
response.setErrorMsg(errorMsg);
return response;
}
public static <T> Response<T> fail(long code, String msg, String errorMsg) {
Response<T> response = new Response<>();
response.setSuccess(false);
response.setCode(code);
response.setMsg(msg);
response.setErrorMsg(errorMsg);
return response;
}
public static <T> Response<T> fail(long code, String msg, String errorMsg, T data) {
Response<T> response = new Response<>();
response.setSuccess(false);
response.setCode(code);
response.setMsg(msg);
response.setErrorMsg(errorMsg);
response.setData(data);
return response;
}
public static <T> Response<T> copy(Response<?> from) {
Response<T> response = new Response<>();
response.setSuccess(from.isSuccess());
response.setCode(from.getCode());
response.setMsg(from.getMsg());
response.setErrorMsg(from.getErrorMsg());
return response;
}
}
package com.hikcreate.ftp.proxy.base.statuscode;
/**
* 状态码抽象接口
*/
public interface IStatusCode {
/**
* 状态码
*/
long getCode();
/**
* 描述信息
*/
String getMsg();
}
package com.hikcreate.ftp.proxy.base.statuscode;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 公共状态码
*/
@Getter
@AllArgsConstructor
public enum StatusCode implements IStatusCode {
SUCCESS(1000, "操作成功", "操作成功"),
SYSTEM_ERROR(1001, "系统出现错误[1001]", "系统未知错误"),
PERMISSION_DENIED(1002, "没有权限", "没有权限"),
DATA_ERROR(1003, "数据错误", "数据错误"),
REPEAT_SUBMIT(1004, "重复提交", "重复提交"),
PARAM_ERROR(1005, "参数错误", "参数错误"),
BUSINESS_ERROR(1006, "业务错误", "业务错误"),
SIGN_ERROR(1007, "登录失效", "签名错误"),
NO_TOKEN(1008, "登录失效,请重新登录", "缺少Token"),
CROWDED_ERROR(1009, "被挤下线", "被挤下线"),
INVALID_TOKEN(1010, "登录失效,请重新登录", "非法Token"),
EXPIRED_TOKEN(1011, "登录失效,请重新登录", "过期Token"),
OUTDATE_WEAPP_VERSION(1012, "有更新的版本,请重启小程序", "过时的微信版本"),
ACCOUNT_IS_FROZEN(1013, "用户账号被冻结", "用户账号被冻结"),
INVALID_REQUEST(1014, "非法的请求", "非法请求, token时间戳异常"),
ALERT_ERROR(1015, "业务错误", "弹框的业务错误"),
;
/**
* 状态码
*/
private long code;
/**
* 描述信息
*/
private String msg;
private String errorMsg;
}
package com.hikcreate.ftp.proxy.configbean;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author zhangfubing
* @create 2019/10/26 15:54
*/
@Component
@ConfigurationProperties("biz.ftp")
@Data
public class FtpConfigBean {
private String ip;
private Integer port;
private String username;
private String password;
private String illegalReportDir;
}
package com.hikcreate.ftp.proxy.modules.ftp.param.request;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* @author zhangfubing
* @create 2019/10/26 16:01
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors(chain = true)
public class UploadIllegalReportReq {
private String fileName; // 文件名
private String fileBase64Content; // 文件base64内容
}
package com.hikcreate.ftp.proxy.entity; package com.hikcreate.ftp.proxy.modules.ftp.param.response;
import lombok.Data; import lombok.Data;
......
biz:
ftp:
ip: 51.1.123.235
port: 21
username: jsc
password: jsc
illegalReportDir: /hik_pic/illegalReport
\ No newline at end of file
biz:
ftp:
ip: 51.1.123.235
port: 21
username: jsc
password: jsc
illegalReportDir: /hik_pic/illegalReport
\ No newline at end of file
server: server:
port: 80 port: 80
spring: spring:
profiles:
active: dev
application: application:
name: ftp-proxy name: ftp-proxy
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment