你看到的下面這個方法是根據電話號碼回傳資料庫中用戶的所有資訊,如下所示。
{
"message": "The operation was successful.",
"code": 200,
"fileDetailResponseDtos": [
{
"phoneNumber": "550000000",
"textMessage": "Message1",
"createDateTime": "2021-10-20T15:45:27.277",
"sender": "Anar",
"status": 0,
"originatry": 0
},
{
"phoneNumber": "550000000",
"textMessage": "Message2",
"createDateTime": "2021-10-20T15:45:27.277",
"sender": "Anar",
"status": 0,
"originatry": 0
},
{
"phoneNumber": "550000000",
"textMessage": "Message3",
"createDateTime": "2021-10-20T15:45:27.277",
"sender": "Anar",
"status": 0,
"originatry": 0
}
]
}
但是,當我基于不在資料庫中的電話號碼執行操作時,它仍然回傳第二部分而不是此訊息。
{
"message": "The operation was successful",
"code": 200,
"fileDetailResponseDtos": []
}
但我希望它在輸出中看起來像這樣。
{
"message": "Unfortunately, no information was found for this number.",
"code": 400,
}
是的,我知道不可能回傳空串列。下面是我在dao層寫的方法。
當我執行無效操作時如何輸出我想要的訊息?
@Override
public List<FileDetail> getByPhoneNumberCBVersion(String phoneNumber) {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<FileDetail> generateQueryWithMethods = criteriaBuilder.createQuery(FileDetail.class);
Root<FileDetail> starsFrom = generateQueryWithMethods.from(FileDetail.class);
generateQueryWithMethods.select(starsFrom);
generateQueryWithMethods.where(criteriaBuilder.equal(starsFrom.get("phoneNumber"), phoneNumber));
TypedQuery<FileDetail> query = entityManager.createQuery(generateQueryWithMethods);
List<FileDetail> resultList = query.getResultList();
return resultList;
}
uj5u.com熱心網友回復:
如果 resultList 為空,則拋出例外并在 ControllerAdvice 中捕獲它并將訊息轉換為特定的回應。
恕我直言:列出表中的所有資料時無需拋出例外。如果它是空的,你可以用 200 狀態代碼將它列出到客戶端(UI,郵遞員腳本...),串列為空。
拋出自定義 BadRequestException 時的 restcontrolleradvice 示例。
@RestControllerAdvice
public class ExceptionHandlerAdvice {
@ExceptionHandler(value = BadRequestException.class)
public ResponseEntity<ErrorResource> handleBadRequest(BadRequestException ex) {
LOGGER.error(ex.getMessage(), ex);
return ResponseEntity.status(ExceptionResponse.BAD_REQUEST.getStatus())
.body(new ErrorResource(ExceptionResponse.BAD_REQUEST.getCode(),
String.format(ExceptionResponse.BAD_REQUEST.getMessage(), ex.getMessage())));
}
}
如果 resultList 為空,則拋出例外,如下例所示。
if(CollectionUtils.isEmpty(resultList)) {
throw new BadRequestException();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/331724.html
