Лучший способ - использовать ExceptionMapper. Вы создаете класс UnmarshalExceptionMapper, который реализует ExceptionMapper. Вы аннотируете это с помощью «@Provider», а в конструкторе приложения выполняете «classes.add (UnmarshalExceptionMapper.class)» или «singletons.add (new UnmarshalExceptionMapper ())».
Ваш картограф исключений будет выглядеть примерно так:
@provider
public class UnmarshalExceptionMapper
implements ExceptionMapper<UnmarshalException> {
public Response toResponse(UnmarshalException exception) {
ResponseBuilder rb =
Response.status(
Response.Status.BAD_REQUEST) // Most appropriate HTTP status code
.entity(your xml goes here)
.type("application/xml");
return rb.build();
}
}
Обратите внимание, что вы должны установить тип "application / xml", потому что в настоящее время согласование содержимого НЕ выполняется для сопоставителей исключений. Чтобы провести собственное согласование содержимого, получите из запроса HttpHeaders, найдите заголовок «accept» и установите соответствующий тип.