0

Я использую playFramework 2.3.5 с Java, хочу установить sth. в кеше и хотите отобразить его на следующем шаге. Так что мой код в Application.java выглядит следующим образом:Настройка кэша с помощью PlayFramework

public static Result addText() { 

    Input input = new Input("Test"); 

    Cache.set("1", input); 

    return ok(index.render("Your new application is ready.")); 
} 

public static Result getText(){ 

    Input output = (Input) Cache.get("1"); 
    try{ 
    String out = output.getText(); 
    return ok(Html.apply(out)); 

    }catch(NullPointerException e){ 
     return ok(index.render("Fail")); 
    } 

} 

И мой код в маршрутах выглядит следующим образом:

GET /       controllers.Application.index() 
POST /       controllers.Application.addText() 
GET  /output      controllers.Application.getText() 

Класс Input выглядит н. как это:

public class Input { 

    public String text; 

    public Input(String text){ 
    this.text = text; 
    } 

    public String getText(){ 
    return text; 
    } 

} 

Когда я хочу, чтобы проверить это, локальный: 9000/выход бросает NullPointerException. Может кто-то сказать, почему объект не находится в кеше?

+0

В какой строке исключено исключение? Btw, является 'Input' сериализуемым? –

+0

Ошибка NullPointerException: String out = output.getText(); Я добавил класс ввода в свой вопрос. – alexfi

+0

Вы действительно вызываете действие POST на '/' url? Если вы используете браузер и переходите к '/' url, игра вызывается 'controllers.Application.index()' action. –

ответ

0

В режиме dev (play run) игровой кэш не работает полностью. Но большая проблема заключается в том, что кеш по определению может быть сброшен в любое время. Ваше приложение должно иметь возможность обрабатывать Cache.get, возвращая null для того, что вы недавно положили в кеш.

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