Tôi đang học JAX-RS (aka, JSR-311) sử dụng Jersey. Tôi đã tạo thành công một nguồn gốc và đang chơi xung quanh với các thông số:JAX-RS/Jersey làm thế nào để tùy chỉnh xử lý lỗi?
@Path("/hello")
public class HelloWorldResource {
@GET
@Produces("text/html")
public String get(
@QueryParam("name") String name,
@QueryParam("birthDate") Date birthDate) {
// Return a greeting with the name and age
}
}
này hoạt động tuyệt vời, và xử lý bất kỳ định dạng trong miền địa phương hiện nay được hiểu bởi ngày (String) constructor (như YYYY/mm/đ và dd/mm/YYYY). Nhưng nếu tôi cung cấp một giá trị không hợp lệ hoặc không được hiểu, tôi sẽ nhận được phản hồi 404.
Ví dụ:
GET /hello?name=Mark&birthDate=X
404 Not Found
Làm thế nào tôi có thể tùy chỉnh hành vi này? Có thể một mã phản hồi khác (có thể là "400 Yêu cầu Xấu")? Điều gì về việc đăng nhập một lỗi? Có thể thêm mô tả sự cố ("định dạng ngày không hợp lệ") trong tiêu đề tùy chỉnh để hỗ trợ khắc phục sự cố? Hoặc trả lại toàn bộ phản hồi Lỗi cùng với chi tiết, cùng với mã trạng thái 5xx?
Trong ví dụ của bạn, cuộc gọi đến siêu() nên hơi khác nhau:.. siêu (Response.status (Status.UNAUTHORIZED) thực thể (message) .type ("text/plain") xây dựng()); Cảm ơn sự thấu hiểu. –
Tôi nghĩ rằng phương pháp này sẽ không được thực hiện trong ví dụ của anh ta. – deamon
Trong kịch bản được đề cập trong câu hỏi, bạn sẽ không có cơ hội để ném một ngoại lệ, vì Jersey sẽ tăng ngoại lệ vì nó sẽ không thể tạo đối tượng Date của giá trị đầu vào. Có cách nào để ngăn chặn ngoại lệ Jersey? Có một giao diện ExceptionMapper, tuy nhiên nó cũng chặn các ngoại lệ được ném bởi phương thức này (trong trường hợp này). –