Spring 3.2.0 を使用しています。この回答によると、注釈付きコントローラーに同じメソッドがあり、次のHandlerExceptionResolver
ようなインターフェイスを実装しています。
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) {
Map<String, Object> model = new HashMap<String, Object>(0);
if (exception instanceof MaxUploadSizeExceededException) {
model.put("msg", exception.toString());
model.put("status", "-1");
} else {
model.put("msg", "Unexpected error : " + exception.toString());
model.put("status", "-1");
}
return new ModelAndView("admin_side/ProductImage");
}
Spring 構成には以下が含まれます。
<bean id="filterMultipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize">
<value>10000</value>
</property>
</bean>
ファイルサイズを超えると、前述のメソッドが呼び出され、例外が自動的に処理されるはずですが、まったく発生しません。resolveException()
例外が発生しても、メソッドが呼び出されることはありません。この例外を処理する方法は何ですか? 何か不足していますか?
ここにも 同じ こと が 明記 さ れて い る. 私の場合、なぜうまくいかないのかわかりません。
次のアプローチを試しました@ControllerAdvice
が、どちらもうまくいきませんでした。
package exceptionhandler;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@ControllerAdvice
public final class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = {MaxUploadSizeExceededException.class})
protected ResponseEntity<Object> handleConflict(RuntimeException ex, WebRequest request) {
String bodyOfResponse = "This should be application specific";
return handleExceptionInternal(ex, bodyOfResponse, new HttpHeaders(), HttpStatus.CONFLICT, request);
}
}
私も詳細を入れようとしました - Exception
。
@ExceptionHandler(value={Exception.class})
どのような場合でも、このメソッドResponseEntity()
は呼び出されません。
一般に、可能であれば、コントローラー ベース (コントローラー レベル) ごとにこの例外を処理したいと考えています。このため、1 つの@ExceptionHandler
注釈付きメソッドは、アプリケーション全体に対してグローバルではなく、その特定のコントローラーに対してのみアクティブにする必要があります。これは、私のアプリケーションにはファイルのアップロードを処理する Web ページがいくつかしかないためです。この例外が発生した場合、現在のページにわかりやすいエラー メッセージを表示し、ファイルで構成されたエラー ページにリダイレクトしないようにしweb.xml
ます。これが実現可能ではない場合でも、この例外は、今述べたカスタム要件なしでとにかく処理する必要があります。
どちらのアプローチも私にとってはうまくいきませんでした。私が見つけたこの例外の処理については、これ以上何もありません。XML ファイルなどのどこかに追加の構成が必要ですか?
例外がスローされた後に得られるものは、次のスナップショットで見ることができます。