定义通用的返回对象和统一异常处理

返回正确的信息

 

返回错误的信息 

 

 

 

Controller中抛出异常.

 

异常处理

新增异常处理类

GlobalExceptionHandler 

再加上Controlleradvice注解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个参考实现。 首先,我们可以定义一个通用返回对象,例如: ```java public class Result<T> { private int code; private String message; private T data; // 省略 getter 和 setter 方法 } ``` 然后,在 Spring MVC 中,我们可以使用 `@ControllerAdvice` 注解和 `@ExceptionHandler` 注解来实现统一异常处理返回值处理。具体实现如下: ```java @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) @ResponseBody public Result<?> handleException(Exception e) { // 处理异常,例如记录日志等 return Result.failure(500, "服务器异常"); } @ResponseBody @RequestMapping(produces = "application/json;charset=UTF-8") public Result<?> handleResponseBody(Object result) { if (result instanceof Result) { // 如果返回值已经是 Result 类型,则直接返回 return (Result<?>) result; } else { // 如果返回值不是 Result 类型,则创建一个新的 Result 对象并设置 data 属性 Result<Object> r = Result.success(result); // 过滤掉属性值为空的字段 filterEmptyFields(r.getData()); return r; } } /** * 过滤掉对象中属性值为空的字段 */ private void filterEmptyFields(Object data) { if (data == null) { return; } if (data instanceof Collection) { // 如果是集合类型,则递归处理集合中的元素 Collection<?> collection = (Collection<?>) data; for (Object item : collection) { filterEmptyFields(item); } } else if (data instanceof Map) { // 如果是 Map 类型,则递归处理 Map 中的值 Map<?, ?> map = (Map<?, ?>) data; for (Object value : map.values()) { filterEmptyFields(value); } } else { // 否则,使用反射处理对象中的属性 Field[] fields = data.getClass().getDeclaredFields(); for (Field field : fields) { try { field.setAccessible(true); Object value = field.get(data); if (value == null) { // 如果属性值为空,则将属性值设置为默认值 Class<?> fieldType = field.getType(); if (fieldType == String.class) { field.set(data, ""); } else if (fieldType == Integer.class || fieldType == int.class) { field.set(data, 0); } else if (fieldType == Long.class || fieldType == long.class) { field.set(data, 0L); } else if (fieldType == Double.class || fieldType == double.class) { field.set(data, 0.0); } else if (fieldType == Float.class || fieldType == float.class) { field.set(data, 0.0f); } else if (fieldType == Boolean.class || fieldType == boolean.class) { field.set(data, false); } else if (!fieldType.isPrimitive()) { field.set(data, null); } } else { // 如果属性值不为空,则递归处理属性值 filterEmptyFields(value); } } catch (IllegalAccessException e) { // 忽略访问异常 } } } } } ``` 上述代码中,`handleResponseBody` 方法用于统一处理返回值,并且过滤掉属性值为空的字段。具体实现中,我们使用了反射来获取对象中的属性,并且根据属性类型设置默认值或者递归处理属性值。需要注意的是,这里只是一个简单的实现,实际应用中还需要根据具体业务需求进行调整。 另外,为了方便使用,我们还可以定义一些静态方法来创建 Result 对象,例如: ```java public class Result<T> { // ... public static <T> Result<T> success(T data) { Result<T> result = new Result<>(); result.setCode(200); result.setMessage("成功"); result.setData(data); return result; } public static Result<?> failure(int code, String message) { Result<?> result = new Result<>(); result.setCode(code); result.setMessage(message); return result; } } ``` 这样,我们就可以在 Spring MVC 中统一处理异常返回值,并且过滤掉属性值为空的字段了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值