Với dịch vụ JAX-RS rất đơn giản của tôi, tôi đang sử dụng Tomcat với lĩnh vực JDBC để xác thực, do đó tôi đang làm việc với các chú thích JSR 250.Phản hồi trạng thái HTTP tùy chỉnh với JAX-RS (Jersey) và @RolesAllowed
Vấn đề là tôi muốn trả về phần thân thư tùy chỉnh trong phản hồi trạng thái HTTP. Mã trạng thái (403) nên giữ nguyên. Ví dụ, dịch vụ của tôi trông giống như sau:
@RolesAllowed({ "ADMIN" })
@Path("/users")
public class UsersService {
@GET
@Produces(MediaType.TEXT_PLAIN)
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public String getUsers() {
// get users ...
return ...;
}
}
Nếu một người dùng với một vai trò khác với "ADMIN" truy cập vào dịch vụ, tôi muốn thay đổi thông điệp trả lời cho một cái gì đó như thế (tùy thuộc vào loại phương tiện truyền thông [ xml/json]):
<error id="100">
<message>Not allowed.</message>
</error>
Tại thời điểm Jersey trả về cơ thể sau đây:
HTTP Status 403 - Forbidden
type Status report
message Forbidden
description Access to the specified resource (Forbidden) has been forbidden.
Apache Tomcat/7.0.12
Làm thế nào tôi có thể thay đổi nội dung thư mặc định? Có cách nào để xử lý ngoại lệ (có thể bị ném) để xây dựng phản hồi trạng thái HTTP của riêng tôi không?
Ví dụ hoàn chỉnh: https://www.bhaveshthaker.com/25/customize-handling-server-side-exceptions-with-error-codes-using-exceptionmapper-with-jersey-jax-rs-in-java/ – RAS