全局定义自动API 响应具有统一的格式

API 响应具有统一的格式,通常可以通过创建一个统一的响应对象来实现。这里,我们将定义一个 ResponseEntity 类来封装响应数据,并在控制器中使用它。

步骤 1: 定义统一响应格式

创建一个 ResponseEntity 类,用于封装所有 API 的响应数据。

ResponseEntity.java:

public class ResponseEntity<T> {
    private boolean success;
    private T data;
    private String message;
    private int status;

    public ResponseEntity(T data, boolean success, String message, int status) {
        this.data = data;
        this.success = success;
        this.message = message;
        this.status = status;
    }

    // Getters
    public boolean isSuccess() {
        return success;
    }

    public T getData() {
        return data;
    }

    public String getMessage() {
        return message;
    }

    public int getStatus() {
        return status;
    }
}

步骤 2: 创建全局异常处理器

使用 @ControllerAdvice 注解创建一个全局异常处理器,捕获并处理所有未捕获的异常。

GlobalExceptionHandler.java:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentTypeMismatchException.class)
    public ResponseEntity<Object> handleMethodArgumentTypeMismatch(MethodArgumentTypeMismatchException ex) {
        return new ResponseEntity<>(null, false, "Type mismatch: " + ex.getMessage(), HttpStatus.BAD_REQUEST.value());
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<Object> handleException(Exception ex) {
        return new ResponseEntity<>(null, false, "Internal server error: " + ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR.value());
    }
}

步骤 3: 控制器中使用

在控制器中,使用 ResponseEntity 来包装您的响应数据。

例如:

UserController.java:

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public ResponseEntity<User> selectById(@PathVariable Long id) {
        User user = userService.getById(id);
        if (user == null) {
            return new ResponseEntity<>(null, false, "User not found", HttpStatus.NOT_FOUND.value());
        }
        return new ResponseEntity<>(user, true, "User found", HttpStatus.OK.value());
    }
}

根据不同格式修改ResponseEntity<User>中的定义,例如多数据查询可改成ResponseEntity<List<User>>

步骤 4: 修改服务层

确保服务层的方法返回 User 对象。

UserService.java:

public interface UserService {
    User getById(Long id);
}

UserServiceImpl.java:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public User getById(Long id) {
        return userMapper.selectById(id);
    }
}

UserMapper.java:

public interface UserMapper extends BaseMapper<User> {
}

确保您的 UserMapper 接口继承自 BaseMapper<User>,并且 MyBatis Plus 能够正确扫描到这个接口。

步骤 5: 测试 API:

在实施了这些更改之后,测试您的 API 以确保它返回格式化的响应。

通过这种方式,您可以在一个地方集中处理异常,并且确保所有的 API 响应都具有统一的格式。这不仅简化了控制器代码,还使得 API 的响应更加一致和可预测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值