ActionResult,新Jodd版本的例外

时间:2018-03-07 22:24:00

标签: jodd

我有一些代码可以和jodd 3.9.1一起使用,我想把它升级到jodd版本4.1.4。但我有一些错误:

示例:

@POST @Action
public String save(){
    ... some code for validation
    if (!valid){
        return VTOR_JSON;     //Error
    }
    service.store(Object);
    return NONE;            //Error

}

例外:

jodd.madvoc.MadvocException: Invalid result name:vtor_json     (or  Invalid result name:none)
    at jodd.madvoc.component.ResultsManager.lookup(ResultsManager.java:181)
    at jodd.madvoc.component.MadvocController.render(MadvocController.java:183)
    at jodd.madvoc.ActionRequest.lambda$createExecutionArray$0(ActionRequest.java:208)
    at jodd.madvoc.ActionRequest.invoke(ActionRequest.java:237)
    at jodd.madvoc.component.MadvocController.invoke(MadvocController.java:154)
    at jodd.madvoc.MadvocServletFilter.doFilter(MadvocServletFilter.java:108)

有什么问题?

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

igr,谢谢你的回答。

我尝试你的消化和那种作品。

但是,我还有一些额外的代码:

示例:

public Object save(){
    if (!authorized()){
        return   Redirect.to(AuthAction.ALIAS_ACCESS_DENIED);   //don't work
    }
    if (!valid){
        return JsonResult.of(vtor.getViolations());    //work
    }
    ....
    return null;        //work
}

这是调试输出

38675 [DEBUG] j.m.r.AbstractTemplateViewActionResult.render:79 - new target: /accessDenied:
38676 [DEBUG] j.m.r.ServletDispatcherActionResult.targetExists:99 - target check: /accessDenied.jspf
38676 [DEBUG] j.m.r.ServletDispatcherActionResult.targetExists:99 - target check: /accessDenied.jsp
38676 [DEBUG] j.m.r.AbstractTemplateViewActionResult.render:90 - target found: /accessDenied.jsp

但是,永远不要重定向到accessDenied.html。

我尝试使用Object,但它无法正常工作。

有什么建议吗?

我找到了解决方案:

if (!valid){
    return JsonResult.of(VtorUtil.createViolationsJsonString(request, vtor.getViolations())).value();

}

很容易就像你说的那样,igr; - )

答案 1 :(得分:0)

让我解释一下:))

使用Jodd v4,我们不再拥有VTOR_JSON类型的结果 - 那些返回字符串的结果。 (字符串常量仍然存在,但未使用)。我们不得不删除这种返回结果的方式,因为它不可扩展 - 根本无法轻松添加不同的结果类型。

如何解决?

我们回到基本:) VTOR_JSON返回带有错误的JSON。所以现在你几乎没有选择(如你所见here):

  • 返回使用@RenderWith注释注释的对象;
  • 在动作上添加@RenderWith注释;
  • 返回PathResult辅助对象;
  • 在操作配置中指定结果。

总之,你应该自己做 - 但不要担心它超级容易。例如,您可以返回:

if (!valid) {
    return JsonResult.of(violations());
}
return null;

如果null无效,请尝试返回new NoneActionResult()(抱歉,我们会添加更方便的方式)。

结帐结果包:results

对于这种转变感到抱歉,这真的是出于好的目的。我们将添加更多帮助程序,如JsonResult。当然,如果您需要任何支持,let us know