2016-03-31 5 views
1

У меня проблема с отправкой заголовка для кэшированного ответа.Play Framework 2.4 - Java - заголовок Http и кешированный ответ

Вот мои маршруты,

GET /fassets/XXX.js com.AssetController.getFileXXX() 

И мой контроллер,

@Cached(key = XXX, duration = TIMEOUT_SECONDS,) 
public Result getFileXXX() { 

[...] 
final Result result = ok(file).as("application/javascript"); 
response().setHeader(CACHE_CONTROL, "max-age=100"); 
return result; 
} 

Проблема заключается в том, что для первого запроса, кэш-контроль: макс возраста = 100 правильно отослано. Для остальных результат кэшируется, а заголовок не задан.

I судимого

result.headers().put(CACHE_CONTROL, "max-age=10") 

Но это приведет к ошибке во время выполнения:

Caused by: java.lang.UnsupportedOperationException: null 
at java.util.AbstractMap.put(AbstractMap.java:209) ~[na:1.8.0_45] 

Я также нашел что-то интересное, что могло бы решить эту проблему, но в Скале:

val result = Ok("Hello World!").withHeaders(CACHE_CONTROL -> "max-age=3600") 

Спасибо заранее за вашу помощь.

Julien

+0

Так что же такое проблема/проблема/поведение, которое вы хотите? – Castaglia

+0

Я хочу, чтобы заголовок управления кешем был отправлен с кешированным ответом. Здесь ответ отправляется из @Cached без добавления заголовка. Я, наконец, решил свою проблему, используя cache.get/set вместо anotating. Поэтому я могу каждый раз настраивать заголовок. – Xr17

ответ

0

Я думаю, что answer by Codemwnci также относится к вашему вопросу:

Вы должны взглянуть на JavaResponse section.

Пример настройки управления кэшем из документации

public static Result index() { 
    response().setContentType("text/html"); 
    response().setHeader(CACHE_CONTROL, "max-age=3600"); 
    response().setHeader(ETAG, "xxx"); 
    return ok("<h1>Hello World!</h1>"); 
} 

Я бы установить response().setHeader вещи перед вызовом ok.

Смежные вопросы