在Java开发中,返回结果封装是一个常见的需求。良好的返回结果封装可以使得接口调用更加清晰、易于维护。本文将深入探讨Java中的CommonResult封装,分析其设计理念、实现方法以及如何打造高效、...
在Java开发中,返回结果封装是一个常见的需求。良好的返回结果封装可以使得接口调用更加清晰、易于维护。本文将深入探讨Java中的CommonResult封装,分析其设计理念、实现方法以及如何打造高效、易用的通用返回结果封装。
CommonResult封装的设计理念主要包括以下几点:
首先,定义一个通用的返回结果类CommonResult,包含以下属性:
code:返回码,表示操作成功与否。message:返回信息,用于描述操作结果。data:返回数据,可以是任意类型。public class CommonResult { private Integer code; private String message; private T data; // 省略构造方法、getter和setter
} 为了方便使用,可以定义一个枚举类ResultCode,包含常用的返回码和返回信息:
public enum ResultCode { SUCCESS(200, "操作成功"), ERROR(500, "操作失败"); private Integer code; private String message; ResultCode(Integer code, String message) { this.code = code; this.message = message; } // 省略getter和setter
}在业务层,使用CommonResult封装返回结果:
public class UserService { public CommonResult getUserById(String userId) { // 模拟查询用户 String user = "User" + userId; // 模拟操作成功 return new CommonResult<>(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage(), user); }
} 在Controller层,直接返回封装好的CommonResult对象:
@RestController
public class UserController { @Autowired private UserService userService; @GetMapping("/user/{id}") public CommonResult getUserById(@PathVariable String id) { return userService.getUserById(id); }
} 在CommonResult中,可以添加一个boolean isSuccess()方法,用于判断操作是否成功,减少数据传输:
public class CommonResult { // ... 省略其他属性和方法 public boolean isSuccess() { return code == ResultCode.SUCCESS.getCode(); }
} 为了提高性能,可以自定义CommonResult的序列化,例如使用Jackson或Gson进行序列化:
public class CommonResultSerializer extends StdSerializer> { public CommonResultSerializer() { this(null); } public CommonResultSerializer(Class> type) { super(type); } @Override public void serialize(CommonResult> value, JsonGenerator gen, SerializerProvider provider) throws IOException { gen.writeStartObject(); gen.writeNumberField("code", value.getCode()); gen.writeStringField("message", value.getMessage()); gen.writeBooleanField("isSuccess", value.isSuccess()); if (value.getData() != null) { gen.writeObjectField("data", value.getData()); } gen.writeEndObject(); }
} 在Controller层,可以统一处理异常,并返回CommonResult对象:
@ControllerAdvice
public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) @ResponseBody public CommonResult handleException(Exception e) { return new CommonResult<>(ResultCode.ERROR.getCode(), e.getMessage()); }
} 通过以上方法,可以打造一个高效、易用的通用返回结果封装,提高开发效率,降低维护成本。