3

こんにちは。この問題に数日間苦労しました。アプリケーション内のすべてのエラーをキャッチするために、Spring Bean (リゾルバー) を支援したいと考えています。ほとんどすぐに行われた例外をキャッチしますが、http エラーをキャプチャすると処理されません。

プロブレム リゾルバーの本質は、http エラーをインターセプトできません。

私は web.xml とコントローラーを使用したくありません。なぜなら、決定がまだ Spring コンテキストを使用していることを願っているからです。

キャッチ例外の実装:

<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
        <map>
            ...
            <entry key="java.lang.Throwable" value=".error" />
        </map>
    </property>
    <property name="defaultErrorView" value=".error"/>
</bean>
4

2 に答える 2

3

40xエラーのマッピングを設定してweb.xmlから、コントローラーで処理します(コントローラーも拡張SimpleMappingExceptionResolverして処理し500ます)

<error-page>
    <error-code>404</error-code>
    <location>/404</location>
</error-page>

@RequestMapping(value = "/404")
public String handle404(final HttpServletRequest request, final Model model) {

     final String originalUri = (String)       
        request.getAttribute("javax.servlet.forward.request_uri");
     // etc.
    return "404";
}

ここで同じことについて質問があります

于 2012-08-03T08:45:11.357 に答える
0

1 つの方法は、HandlerExceptionResolverインターフェイスを使用することです。

HandlerExceptionResolver インターフェースの代替は@ExceptionHandlerアノテーションです。コントローラー内でメソッドアノテーションを使用して@ExceptionHandler、コントローラーメソッドの実行中に特定のタイプの例外がスローされたときに呼び出されるメソッドを指定します。例えば:

package com.spring3;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloWorldController {

    @ExceptionHandler(Exception.class)
    public ModelAndView handleMyException(Exception exception) { 
        ModelAndView mv = new ModelAndView("redirect:errorMessage.html?error=" + exception.getMessage());
        return mv; 
    }

    @RequestMapping(value = "/errorMessage", method = RequestMethod.GET)
    public ModelAndView handleMyExceptionOnRedirect(@RequestParam("error") String error) {
        ModelAndView mv = new ModelAndView("uncaughtExceptionSpring"); 
        v.addObject("error", error);
        return mv; 
    }

    @RequestMapping("/hello")
    public ModelAndView helloWorld() throws Exception {
        String message = "Hello World, Spring 3.0!";
        return new ModelAndView("hello", "message", message);
    }
}

Spring MVCの例外処理とカスタムビューの表示Part1 , 2 , 3 , 4

于 2012-08-03T08:57:58.210 に答える