DXA Java-отправка 500 код состояния для файла не найден


4

Мы работаем на веб-сайте, используя SDL Tridion 2013 SP1, Oracle 12c (CM & CD) и Java на стороне компакт-диска. Любые недопустимые URL-адреса на веб-сайте (ссылки, которые не существуют на веб-сайте) генерируют 500 код состояния ошибки сервера, а не отправляют 404-файл, который не найден. Может кто-то любезно посоветует, как это исправить.

  0

Отъезд http://tridion.stackexchange.com/questions/12686/dxa-web-application-java-issues-while-creating-a-new-page - возможно, это поможет :-) 31 дек. 152015-12-31 09:28:31

  0

i столкнулся с похожими выпуске в dxa.net в очень ранней версии, DXA пытается угадать страницу, если url заканчивается символом «/» через индекс суффикса и т. д., если этот угадающий url не существует в брокере. он бросает 500. 01 янв. 162016-01-01 17:04:04

  0

Спасибо за ваши комментарии. Я связался с SDL и был проинформирован о том, что это ошибка в предварительной версии Java-DXA. 05 янв. 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 для файла не найден.