我开发了一个简单的带有 Boot 的todo-list应用程序,我想发送所有请求的通用响应数据,因为响应消息中的数据可以是各种类型的。
public class ResponseMessage<T> {
private int statusCode = HttpStatus.OK.value();
private String message = "";
protected T data; // this is generic. it can be many response dto.
public static ResponseMessage<String> ok() {
return new ResponseMessage<>("");
}
public static <T> ResponseMessage<T> ok(T data) {
return new ResponseMessage<>(data);
}
public static ResponseMessage<Object> noContent() {
return new ResponseMessage<>(HttpStatus.NO_CONTENT.value(), HttpStatus.NO_CONTENT.getReasonPhrase(), "");
}
protected ResponseMessage(T data) {
this.data = data;
}
private ResponseMessage(int statusCode, String message, T data) {
this.statusCode = statusCode;
this.message = message;
this.data = data;
}
protected ResponseMessage() {}
public int getStatusCode() {
return statusCode;
}
public String getMessage() {
return message;
}
public T getData() {
return data;
}
}
现在我需要做一个功能,找到一个recend待办事项。
如果待办事项存在,则发送ResponseMessage。
{
"statusCode": 200,
"message": "",
"data": [
{
"id": 1,
"title": "test",
"status": "TODO"
}
]
}
如果待办事项不存在,请发送ResponseMessage。
{
"statusCode": 200,
"message": "",
"data": []
}
现在我的控制器函数返回如下。
public ResponseMessage<?> findRecent(@AuthenticationPrincipal LoginUser user) {
Optional<TodoResponse> todo = todoService.findRecent(user.getId());
return todo.isPresent() ? ResponseMessage.ok(todo.get()) : ResponseMessage.noContent();
}
我知道问号“?”是不好的。那么什么是更好的方式返回A或B在这种情况下?请帮助我。
1条答案
按热度按时间fnx2tebb1#
如果将
noContent().data
设置为null,则可以安全地为其指定任何类型:还要注意,调用
Optional.isPresent()
,然后调用get()
是一种反模式,在您的情况下,可以将其简化为: