2013-09-25 3 views
6

Я использую композицию Action для своей игры! приложений до сих пор, и они отлично работали. Однако с недавним обновлением 2.2.0 они больше не работают, и я не знаю, как их правильно обновлять.PlayFramework 2.2 Java Action Composition

То, что это действие, например:

public class ChatMsgValidation extends Action<ChatMsgValidation.ValidChatMsg> { 

@With(ChatMsgValidation.class) 
@Target({ElementType.TYPE, ElementType.METHOD}) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface ValidChatMsg { 
} 


public Result call(Http.Context ctx) throws Throwable { 

    Utils.debugFunctionCall("ValidChatMsg() " + ctx.toString()); 

    // validate we got the "player" parameter 
    JsonNode jsonRequest = request().body().asJson(); 
    if (!WSUtils.validateJSONField(Constants.JSON_MSG, jsonRequest)) { 
     return badRequest(WSUtils.simpleMissingFieldMsg(Constants.JSON_MSG)); 
    } 

    RequestParser requestParser = new RequestParser(request()); 
    String chatMsg = requestParser.getMessage(); 

    if (chatMsg.isEmpty()) { 
     return badRequest(WSUtils.simpleFailureMsgWithReason(Messages.get("message.cannot.be.empty.error"), FailConstants.REASON_EMPTY)); 
    } 


    if (chatMsg.length() < Constants.MIN_CHAT_MESSAGE_LENGTH) { 
     return badRequest(WSUtils.simpleFailureMsgWithReason(Messages.get("query.lower.limit.error"), FailConstants.REASON_TOO_SHORT)); 
    } 

    if (chatMsg.length() > Constants.MAX_CHAT_MESSAGE_LENGTH) { 
     return badRequest(WSUtils.simpleFailureMsgWithReason(Messages.get("message.too.long.error"), FailConstants.REASON_TOO_LONG)); 
    } 

    return delegate.call(ctx); 
} 
} 

Проблема теперь метод «вызов» должен вернуть «Обещание» вместо «результата», и я не могу понять, способ возврата простое сообщение JSON, не делая много кода, бесполезный код, потому что я создаю фиктивные функции только для того, чтобы иметь обещания. Должен быть лучший способ, который я не вижу, пожалуйста, посоветуйте.

ответ

9

Я определил лучшее решение для своей проблемы. Он заключается в следующем:

return F.Promise.pure((SimpleResult) badRequest(WSUtils.simpleFailureMsgWithReason(Messages.get("message.cannot.be.empty.error"), FailConstants.REASON_EMPTY))); 
Смежные вопросы