스프링 부트 레스트 - 404 구성 방법 - 리소스를 찾을 수 없음
워킹 스프링 부츠 레스트 서비스를 받았습니다.경로가 잘못되면 아무것도 반환하지 않습니다.전혀 응답이 없습니다.동시에 오류도 발생하지 않습니다.이상적으로는 404 not found 오류를 예상했습니다.
Global Error Handler를 받았습니다.
@ControllerAdvice
public class GlobalErrorHandler extends ResponseEntityExceptionHandler {
}
ResponseEntity에 이 메서드가 있습니다.예외 처리기
protected ResponseEntity<Object> handleNoHandlerFoundException(NoHandlerFoundException ex, HttpHeaders headers,
HttpStatus status, WebRequest request) {
return handleExceptionInternal(ex, null, headers, status, request);
}
표시했습니다.error.whitelabel.enabled=false
내 소유지에서
404 찾을 수 없는 응답을 클라이언트에 다시 보내려면 이 서비스를 사용하려면 어떻게 해야 합니까?
저는 많은 스레드를 참조했고 이 문제가 누구에게도 발생하지 않았습니다.
이것은 나의 주요 응용 프로그램 수업입니다.
@EnableAutoConfiguration // Sprint Boot Auto Configuration
@ComponentScan(basePackages = "com.xxxx")
@EnableJpaRepositories("com.xxxxxxxx") // To segregate MongoDB
// and JPA repositories.
// Otherwise not needed.
@EnableSwagger // auto generation of API docs
@SpringBootApplication
@EnableAspectJAutoProxy
@EnableConfigurationProperties
public class Application extends SpringBootServletInitializer {
private static Class<Application> appClass = Application.class;
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(appClass).properties(getProperties());
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public FilterRegistrationBean correlationHeaderFilter() {
FilterRegistrationBean filterRegBean = new FilterRegistrationBean();
filterRegBean.setFilter(new CorrelationHeaderFilter());
filterRegBean.setUrlPatterns(Arrays.asList("/*"));
return filterRegBean;
}
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
static Properties getProperties() {
Properties props = new Properties();
props.put("spring.config.location", "classpath:/");
return props;
}
@Bean
public WebMvcConfigurerAdapter webMvcConfigurerAdapter() {
WebMvcConfigurerAdapter webMvcConfigurerAdapter = new WebMvcConfigurerAdapter() {
@Override
public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
configurer.favorPathExtension(false).favorParameter(true).parameterName("media-type")
.ignoreAcceptHeader(false).useJaf(false).defaultContentType(MediaType.APPLICATION_JSON)
.mediaType("xml", MediaType.APPLICATION_XML).mediaType("json", MediaType.APPLICATION_JSON);
}
};
return webMvcConfigurerAdapter;
}
@Bean
public RequestMappingHandlerMapping defaultAnnotationHandlerMapping() {
RequestMappingHandlerMapping bean = new RequestMappingHandlerMapping();
bean.setUseSuffixPatternMatch(false);
return bean;
}
}
솔루션은 매우 간단합니다.
먼저 모든 오류 사례를 처리할 컨트롤러를 구현해야 합니다.이 컨트롤러는 다음을 수행해야 합니다.@ControllerAdvice
정의하는 데 필요한@ExceptionHandler
모두에게 해당되는 것@RequestMappings
.
@ControllerAdvice
public class ExceptionHandlerController {
@ExceptionHandler(NoHandlerFoundException.class)
@ResponseStatus(value= HttpStatus.NOT_FOUND)
@ResponseBody
public ErrorResponse requestHandlingNoHandlerFound() {
return new ErrorResponse("custom_404", "message for 404 error code");
}
}
응답을 재정의할 예외 제공@ExceptionHandler
.NoHandlerFoundException
Spring이 요청을 위임할 수 없을 때 생성되는 예외입니다(404건).지정할 수도 있습니다.Throwable
모든 예외를 무시합니다.
두 번째로 Spring에게 404(핸들러를 확인할 수 없음)의 경우 예외를 던지라고 말해야 합니다.
@SpringBootApplication
@EnableWebMvc
public class Application {
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
DispatcherServlet dispatcherServlet = (DispatcherServlet)ctx.getBean("dispatcherServlet");
dispatcherServlet.setThrowExceptionIfNoHandlerFound(true);
}
}
정의되지 않은 URL을 사용할 때의 결과
{
"errorCode": "custom_404",
"errorMessage": "message for 404 error code"
}
업데이트: 다음을 사용하여 SpringBoot 응용 프로그램을 구성하는 경우application.properties
그런 다음 구성하는 대신 다음 속성을 추가해야 합니다.DispatcherServlet
주요 방법으로(@pxchengengfeng 덕분):
spring.mvc.throw-exception-if-no-handler-found=true
spring.web.resources.add-mappings=false
이것이 오래된 질문이라는 것을 알지만 여기에 구성할 다른 방법이 있습니다.DispatcherServlet
코드는 있지만 메인 클래스는 아닙니다.별도로 사용할 수 있습니다.@Configuration
클래스:
@EnableWebMvc
@Configuration
public class ExceptionHandlingConfig {
@Autowired
private DispatcherServlet dispatcherServlet;
@PostConstruct
private void configureDispatcherServlet() {
dispatcherServlet.setThrowExceptionIfNoHandlerFound(true);
}
}
이것이 없이는 작동하지 않는다는 것을 제발 하지 마세요.@EnableWebMvc
주석
속성 파일에 추가합니다.
spring: mvc: throw-exception-if-no-handler-found: true web: resources: add-mappings: false
당신의
@ControllerAdvice
클래스 추가:@ExceptionHandler(NoHandlerFoundException.class) public ResponseEntity<Object> handleNoHandlerFound404() { return new ResponseEntity<>(HttpStatus.BAD_REQUEST);; }
언급URL : https://stackoverflow.com/questions/36733254/spring-boot-rest-how-to-configure-404-resource-not-found
'programing' 카테고리의 다른 글
mongod를 사용하여 날짜를 utc에 저장할 때 시간대 문제를 어떻게 처리합니까? (0) | 2023.07.07 |
---|---|
Document의 Mongoengine creation_time 특성 (0) | 2023.07.07 |
날짜를 10분 간격으로 반올림 (0) | 2023.07.07 |
PHP MariaDB PDO 수 중복 값 (0) | 2023.07.07 |
ePub 형식을 읽는 중 (0) | 2023.07.07 |