1. 先看如何在Controller的方法中优雅的返回响应结果:
@PostMapping(path = "/myController/getData")
public JsonResponse getAllData() {
try {
myDataList = xxxServiceImpl.getAllData();
} catch (final Exception ex) {
//有异常时
return JsonResponse.builder().httpStatus(HttpStatus.NOT_FOUND).build();
}
//成功返回
return JsonResponse.builder().httpStatus(HttpStatus.OK).data(myDataList)
.build();
}
2. 如何封装Response:
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.builder.RecursiveToStringStyle;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.springframework.http.HttpStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class JsonResponse implements Serializable {
@Getter
@Setter
@Builder.Default
private boolean success = true;
@Getter
@Setter
private Object data;
@Getter
@Setter
@Builder.Default
private HttpStatus httpStatus = HttpStatus.OK; // default 200
@Getter
@Setter
private String errCode;
@Getter
@Setter
private String errMsg;
@Getter
@Setter
private String errDesc = "";
//分页数据
@Getter
@Setter
private Map<String,Object> pagingInfo;
public JsonResponse(Object data) {
this.data = data;
}
@Override
public String toString() {
return ReflectionToStringBuilder.reflectionToString(this, RecursiveToStringStyle.SHORT_PREFIX_STYLE);
}
// 返回Json字符串
public String toJsonString() {
return ReflectionToStringBuilder.reflectionToString(this, RecursiveToStringStyle.JSON_STYLE);
}
}
1. Lombok 的 @Builder 用法: 通过在类上添加 lombok 的 @Builder 注解,使该类可以基于建造者模式进行对象的创建;
- 被 @Builder 修饰的类没有无参的构造函数,必须通过builder()方法创建对象;
- 参考: 如何使用 lombok 的 @Builder 注解改变对象的创建方式_import lombok.builder;-CSDN博客
2.ReflectionToStringBuilder类是用来实现类中的toString ()方法的类,它采用Java反射机制(Reflection),通过reflection包中的AccessibleObject类绕过访问控制而直接存取对象的私有成员。