responsebodyadvice 统一处理返回结果,如何保留null字段
时间: 2024-02-16 18:04:25 浏览: 140
在统一处理返回结果时,我们可以使用一个自定义的类来封装返回结果,这个类中可以包含需要返回的数据以及一些额外的信息,比如状态码、错误信息等。在这个类中,我们可以使用 Java 中的 Optional 类型来表示可能为 null 的字段,这样就可以保留 null 字段了。
例如,在返回结果中可能包含一个 User 对象,但是这个对象有可能为 null。我们可以定义一个返回结果类 Result<T>,其中 T 代表返回的数据类型,代码如下:
```java
public class Result<T> {
private int code;
private String message;
private T data;
public Result(int code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Optional<T> getData() {
return Optional.ofNullable(data);
}
public void setData(T data) {
this.data = data;
}
}
```
在这个类中,我们使用了 Optional<T> 类型来表示可能为 null 的字段 data,在调用方获取 data 时,可以通过调用 Optional 的 get() 方法来获取 data 的值,如果 data 为 null,则会抛出 NoSuchElementException 异常,因此需要在调用 get() 方法前先判断 Optional 是否为 null。
例如,如果需要返回一个 User 对象,但是这个对象可能为 null,可以这样使用 Result 类:
```java
public Result<User> getUser(int userId) {
User user = userService.getUser(userId);
if (user != null) {
return new Result<>(200, "success", user);
} else {
return new Result<>(404, "not found", null);
}
}
```
在调用方获取 User 对象时,可以这样使用:
```java
Result<User> result = getUser(1001);
if (result.getData().isPresent()) {
User user = result.getData().get();
// 处理 user 对象
} else {
// 处理返回结果为空的情况
}
```
阅读全文