У меня есть этот ресурс (упрощенный):Пользовательский контент расширение обработки переговоры и «Accept» заголовок с Джерси
@Path("/cars{extension:(\\.(xml|json))?}")
public class Cars {
@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response searchCars(@PathParam("extension") String extension) {
System.out.println("extension: " + extension);
//...
return Response.status(200).entity(output).build();
}
}
И я хочу, например (но бизнес-логика может измениться), чтобы вернуть ответ XML если расширение является xml, или Json, если расширение является json, независимо от заголовка «Accept». По умолчанию я хочу использовать заголовок Accept, но предположим, что какой-то фиктивный парень хочет получить доступ к моему веб-сервису с помощью Ajax и мало знает о заголовках, я хочу упростить его, просто добавив соответствующее расширение ,
С этим фрагментом я могу получить расширение (если оно есть), но я не знаю, как изменить стратегию соответственно.
Спасибо!
EDIT:
Так что я нашел что-то, что я могу использовать .тип() из Response.ResponseBuilder как:
Response.ResponseBuilder responseBuilder = Response.status(200).entity(output);
if ([some test about extention or header])
responseBuilder.type(MediaType.APPLICATION_XML);
// other tests
Я не знаю, если это правильный способ сделать, но это означало бы, что мне нужно обработать его для всех путей ...
Спасибо за Вы отвечаете. Кстати, «Dummy guy» не уничижителен ;-) Таким образом, он работает с фильтром, но я работал с родительским классом, который обрабатывал эти материалы для моих ресурсов. Один вопрос о фильтре и ContainerResponseContext, просто для производительности, я хотел бы быть уверенным, что setEntity() не вызывается после того, как сущность была сериализована в первый раз (после вызова ресурса)? Вы знаете? Чтобы быть более ясным, я хочу быть уверенным, что сериализация/сортировка не происходит перед фильтром. –
Маршаллинг - одна из последних вещей, которые будет выполнять Джерси. Поэтому сначала фильтры, чем сортировка, ... – zyexal