DXA Java发送文件未找到500状态代码


4

我们正在使用SDL Tridion 2013 SP1,Oracle 12c(CM & CD)和CD上的Java的网站上工作。网站上的任何无效URL(网站上不存在的链接)都会生成500个服务器错误状态代码,而不是发送未找到的404文件。有人可以建议如何解决这个问题。

  0
  0

我遇到了类似的问题在dxa.net的早期版本中,DXA尝试猜测页面是否通过后缀索引以“/”结尾,如果该猜测URL在代理中不存在。它会抛出500. 01 1月. 162016-01-01 17:04:04

  0

感谢您的意见。我联系了SDL,并被告知这是Java-DXA预发布版本中的一个错误。 05 1月. 162016-01-05 10:11:13

1
/** 
* Handles a {@code NotFoundException}. 
* 
* @param request The request. 
* @return The name of the view that renders the "not found" page. 
*/ 


public String handleNotFoundException(HttpServletRequest request, HttpServletResponse response) throws Exception { 
    String path = webRequestContext.getLocalization().getPath(); 
    String notFoundPageUrl = (path.endsWith("/") ? path : path + "/") + "error-404"; 

    Page pageModel; 
    try { 
     pageModel = contentProvider.getPageModel(notFoundPageUrl, webRequestContext.getLocalization()); 
    } catch (ContentProviderException e) { 
     LOG.error("Could not find error page", e); 
     throw new HTTPException(SC_NOT_FOUND); 
    } 

    if (!isIncludeRequest(request)) { 
     request.setAttribute(PAGE_ID, pageModel.getId()); 
    } 

    request.setAttribute(PAGE_MODEL, pageModel); 
    request.setAttribute(LOCALIZATION, webRequestContext.getLocalization()); 
    request.setAttribute(MARKUP, markup); 
    request.setAttribute(SCREEN_WIDTH, mediaHelper.getScreenWidth()); 

    response.setStatus(SC_NOT_FOUND); 
    return this.viewResolver.resolveView(pageModel.getMvcData(), "Page", request); 

}

上面的代码可修复提到的问题并正确返回未找到文件404个状态码。