Я хочу добавить собственный заголовок в приложение JAX-RS с весенней загрузкой. Я знаю несколько способов добавления заголовков, но мой вариант использования не может использовать эти варианты использования.
Мой вариант использования заключается в том, что я хочу создать случайную строку в одном из классов, а затем одновременно добавить ее в заголовок и двигаться дальше.
Вот несколько способов добавить заголовок ответа.
1.
`@Produces(MediaType.APPLICATION_JSON)
public UserClass getValues(@Context HttpHeaders header, @Context HttpServletResponse response) {
response.setHeader("yourheadername", "yourheadervalue");
... }`
2.
`@GET
@Produces({ MediaType.APPLICATION_JSON })
@Path("/values")
public Response getValues(String body) {
//Prepare your entity
Response response = Response.status(200).
entity(yourEntity).
header("yourHeaderName", "yourHeaderValue").build();
return response;
}`
Но ничто из этого не решает мой вариант использования.
Скажем, в моем классе я сгенерировал одну строку и хотел добавить в заголовок ответа, подобный этому
@Component
public class AsyncPublisher{
public void publishLogs(Object request, Object response, Object serviceBin, long elapsedTime ){
String headerValue = "headerValue";
*// get response header list here and add header like this*
// responseHeaders.add("Custom-Header", headerValue)
}
}
Кто-нибудь знает, как это сделать. Потому что все три метода не решают эту задачу.
@PaulSamsotha для этого мне нужно вернуть объект Response, но здесь мой метод ничего не возвращает. У меня уже есть набор ответов, просто хочу добавить заголовок ко всем ответам.
Рассмотрите возможность рефакторинга.
Я ожидал, что №2 сработает. вы пробовали поместить вызов заголовка перед вызовом состояния? иногда при построении заголовок записывается в выходной поток и сначала сбрасывается. поэтому более поздние вызовы заголовков не имеют значения.




Если вы еще не знаете статус, можно просто выполнить
Response.ok(), который вернетResponseBuilder. Вы можете добавить к нему заголовок. Позже, когда вы узнаете статус, установите его наResponseBuilder. Позвоните вbuild(), чтобы получитьResponse. Посмотрите javadocsResponseиResponse.ResponseBuilder.