Spring Boot – обработка NoHandlerFoundExceptionJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Spring Boot – обработка NoHandlerFoundException

Сообщение Anonymous »

Прочитайте Справочное руководство Spring о том, как обрабатывать NoHandlerFoundException, и обнаружили, что Spring по умолчанию устанавливает для throwExceptionIfNoHandlerFound значение false.

Знание поэтому я подумал, что было бы неплохо установить для этого параметра значение true.

Я использую Spring Boot.

Сделал так:

MyConfig.java

Код: Выделить всё

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

@SpringBootApplication
public class MyConfig {

public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(MyConfig.class, args);
context.getBean(DispatcherServlet.class).setThrowExceptionIfNoHandlerFound(true);

// ...
}
}
Хорошо, теперь throwExceptionIfNoHandlerFound равен true. Однако это сработало не так, как ожидалось. DispatcherServlet по-прежнему не вызывал исключение NoHandlerFoundException. Таким образом я не смог с этим справиться.

CustomExceptionHandler.java (это не сработало)< /p>

Код: Выделить всё

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.context.request.WebRequest;
import org.springframework.web.servlet.NoHandlerFoundException;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;

@ControllerAdvice
public class CustomExceptionHandler extends ResponseEntityExceptionHandler {

@Override
protected ResponseEntity  handleNoHandlerFoundException(NoHandlerFoundException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
// do my own handle ...

// then, return ...
}

}
После небольшого поиска выяснилось, что добавление @EnableWebMvc должно работать. Затем я добавил эту аннотацию в свой CustomExceptionHandler

CustomExceptionHandler.java (это сработало)

Код: Выделить всё

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.context.request.WebRequest;
import org.springframework.web.servlet.NoHandlerFoundException;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;

@EnableWebMvc
@ControllerAdvice
public class CustomExceptionHandler extends ResponseEntityExceptionHandler {

@Override
protected ResponseEntity  handleNoHandlerFoundException(NoHandlerFoundException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
// do my own handle ...

// then, return ...
}

}
Таким образом дескриптор работает. Однако я использую Spring Boot. Документы Spring Boot предполагают, что если я вставлю @EnableWebMvc, я потеряю некоторые функции автоматической настройки Spring Boot MVC, поскольку я возьму на себя полный контроль над Spring MVC. (См. здесь).


"Если вы хотите получить полный контроль над Spring MVC, вы можете добавить свою собственную @Configuration с аннотацией @EnableWebMvc. ."


Потерю ли я автоконфигурацию Spring MVC? Я имею в виду @EnableWebMvc, в моем случае это не класс @Configuration.

Мой вопрос основан на том факте, что Я не уверен, как работает приведенный выше код, и хочу знать, есть ли другой способ сделать это без потери автоматической конфигурации Spring MVC. Может кто-нибудь объяснить?

Подробнее здесь: https://stackoverflow.com/questions/510 ... dexception
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»