19

私の場合、私のアプリはクライアントへのエラー応答に対して応答を@ExceptionHandler返します。JSONHTTP status

error 404ただし、によって処理されるような同様の JSON 応答を返すように処理する方法を理解しようとしています。@ExceptionHandler

アップデート:

というか、存在しないURLにアクセスされたとき

4

5 に答える 5

46

私はSpring 4.0とJava構成を使用しています。私の作業コードは次のとおりです。

@ControllerAdvice
public class MyExceptionController {
    @ExceptionHandler(NoHandlerFoundException.class)
    public ModelAndView handleError404(HttpServletRequest request, Exception e)   {
            ModelAndView mav = new ModelAndView("/404");
            mav.addObject("exception", e);  
            //mav.addObject("errorcode", "404");
            return mav;
    }
}

JSP の場合:

    <div class="http-error-container">
        <h1>HTTP Status 404 - Page Not Found</h1>
        <p class="message-text">The page you requested is not available. You might try returning to the <a href="<c:url value="/"/>">home page</a>.</p>
    </div>

初期パラメータ構成の場合:

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    public void customizeRegistration(ServletRegistration.Dynamic registration) {
        registration.setInitParameter("throwExceptionIfNoHandlerFound", "true");
    }
}

またはxml経由:

<servlet>
    <servlet-name>rest-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>throwExceptionIfNoHandlerFound</param-name>
        <param-value>true</param-value>
    </init-param>
</servlet>

関連項目: Spring MVC Spring のセキュリティとエラー処理

于 2014-12-01T08:07:51.303 に答える
7

spring > 3.0 では @ResponseStatus を使用

  @ResponseStatus(value = HttpStatus.NOT_FOUND)
  public class ResourceNotFoundException extends RuntimeException {
    ...
}

    @Controller
    public class MyController {
    @RequestMapping.....
    public void handleCall() {
        if (isFound()) {
        // do some stuff
        }
        else {
              throw new ResourceNotFoundException(); 
        }
    }
}
于 2012-11-13T06:52:02.557 に答える
4

見つける最も簡単な方法は、次を使用することです。

@ExceptionHandler(Throwable.class)
  public String handleAnyException(Throwable ex, HttpServletRequest request) {
    return ClassUtils.getShortName(ex.getClass());
  }

URL が DispatcherServlet のスコープ内にある場合、入力ミスなどによって発生した 404 はこのメソッドによってキャッチされますが、入力された URL が DispatcherServlet の URL マッピングを超えている場合は、次のいずれかを使用する必要があります。

<error-page>
   <exception-type>404</exception-type>
   <location>/404error.html</location>
</error-page>

また

特定のサーバー インスタンスのすべてのマッピングを処理できるように、DispatcherServlet マッピング URL に「/」マッピングを指定します。

于 2012-11-13T11:23:13.907 に答える
1

サーブレットの標準的な方法を使用して404エラーを処理できます。次のコードを追加しますweb.xml

<error-page>
   <exception-type>404</exception-type>
   <location>/404error.html</location>
</error-page>
于 2012-11-13T09:28:28.107 に答える