Tôi đang phát triển một dịch vụ RESTful đơn giản cho các giải đấu và lịch trình. Khi một giải đấu được tạo thông qua một yêu cầu POST chứa phần thân JSON, giải đấu được chèn vào một BiMap
, được khai báo như sau trong triển khai DAO:
private BiMap<String, Tournament> tournaments = Maps.synchronizedBiMap(HashBiMap.create());
Khi một giải đấu được tạo, id chuỗi liên kết của nó được trả về để người dùng có thể có tham chiếu trong tương lai của giải đấu đó. Anh ấy / cô ấy có thể lấy lại thông tin từ giải đấu mới thực hiện yêu cầu sau:
GET http://localhost:8080/eventscheduler/c15268ce-474a-49bd-a623-b0b865386f39
Nhưng nếu không có giải đấu với id như vậy được tìm thấy thì sao? Cho đến nay, tôi đang trả lại một phản hồi 204. Vâng, Jersey đang làm điều đó cho tôi khi trở về null
từ một trong những phương pháp của nó. Đây là phương pháp tương ứng với tuyến đường trên:
@Path("/{id}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Tournament getTournament(@PathParam("id") String id) {
Optional<Tournament> optTournament = tournamentDao.getTournament(id);
if (optTournament.isPresent())
return optTournament.get();
return null;
}
Câu hỏi của tôi là: có thể trả lại 204: No Content
phản hồi hay 404
thay vào đó là phản hồi vì tài nguyên không được tìm thấy?
Nếu tôi nên thay đổi nó thành 404, câu hỏi rõ ràng: Tôi nên thay đổi chữ ký phương thức phải không? Vì bây giờ một giải đấu (loại Tournament
) có thể không được trả lại, nên phương thức sẽ khác. Tôi có nên sử dụng Response
loại như loại trả lại thay thế?
{content: ''}
:), thì phản hồi 204 sẽ không phù hợp.