Set ResponseStatusExceptionResolver.messageSource in the MVC Java config
Issue: SPR-12380
This commit is contained in:
parent
ad2d5952c6
commit
17b9bde336
|
@ -781,11 +781,14 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv
|
||||||
interceptors.add(new JsonViewResponseBodyAdvice());
|
interceptors.add(new JsonViewResponseBodyAdvice());
|
||||||
exceptionHandlerExceptionResolver.setResponseBodyAdvice(interceptors);
|
exceptionHandlerExceptionResolver.setResponseBodyAdvice(interceptors);
|
||||||
}
|
}
|
||||||
exceptionHandlerExceptionResolver.afterPropertiesSet();
|
ResponseStatusExceptionResolver responseStatusExceptionResolver = new ResponseStatusExceptionResolver();
|
||||||
|
responseStatusExceptionResolver.setMessageSource(this.applicationContext);
|
||||||
|
|
||||||
exceptionResolvers.add(exceptionHandlerExceptionResolver);
|
exceptionResolvers.add(exceptionHandlerExceptionResolver);
|
||||||
exceptionResolvers.add(new ResponseStatusExceptionResolver());
|
exceptionResolvers.add(responseStatusExceptionResolver);
|
||||||
exceptionResolvers.add(new DefaultHandlerExceptionResolver());
|
exceptionResolvers.add(new DefaultHandlerExceptionResolver());
|
||||||
|
|
||||||
|
exceptionHandlerExceptionResolver.afterPropertiesSet();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -31,20 +31,25 @@ import org.junit.Test;
|
||||||
import org.springframework.beans.DirectFieldAccessor;
|
import org.springframework.beans.DirectFieldAccessor;
|
||||||
import org.springframework.beans.factory.BeanFactoryUtils;
|
import org.springframework.beans.factory.BeanFactoryUtils;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.context.MessageSource;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
import org.springframework.context.annotation.ScopedProxyMode;
|
import org.springframework.context.annotation.ScopedProxyMode;
|
||||||
|
import org.springframework.context.i18n.LocaleContextHolder;
|
||||||
|
import org.springframework.context.support.StaticMessageSource;
|
||||||
import org.springframework.core.Ordered;
|
import org.springframework.core.Ordered;
|
||||||
import org.springframework.core.convert.ConversionService;
|
import org.springframework.core.convert.ConversionService;
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
import org.springframework.format.annotation.DateTimeFormat.ISO;
|
import org.springframework.format.annotation.DateTimeFormat.ISO;
|
||||||
import org.springframework.format.support.FormattingConversionService;
|
import org.springframework.format.support.FormattingConversionService;
|
||||||
import org.springframework.http.HttpEntity;
|
import org.springframework.http.HttpEntity;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.converter.HttpMessageConverter;
|
import org.springframework.http.converter.HttpMessageConverter;
|
||||||
import org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter;
|
import org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter;
|
||||||
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
|
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
|
||||||
import org.springframework.mock.web.test.MockHttpServletRequest;
|
import org.springframework.mock.web.test.MockHttpServletRequest;
|
||||||
|
import org.springframework.mock.web.test.MockHttpServletResponse;
|
||||||
import org.springframework.mock.web.test.MockServletContext;
|
import org.springframework.mock.web.test.MockServletContext;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.util.AntPathMatcher;
|
import org.springframework.util.AntPathMatcher;
|
||||||
|
@ -53,6 +58,7 @@ import org.springframework.validation.Validator;
|
||||||
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
|
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseStatus;
|
||||||
import org.springframework.web.bind.support.ConfigurableWebBindingInitializer;
|
import org.springframework.web.bind.support.ConfigurableWebBindingInitializer;
|
||||||
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
|
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
|
||||||
import org.springframework.web.method.support.CompositeUriComponentsContributor;
|
import org.springframework.web.method.support.CompositeUriComponentsContributor;
|
||||||
|
@ -219,6 +225,19 @@ public class WebMvcConfigurationSupportTests {
|
||||||
List<Object> interceptors = (List<Object>) fieldAccessor.getPropertyValue("responseBodyAdvice");
|
List<Object> interceptors = (List<Object>) fieldAccessor.getPropertyValue("responseBodyAdvice");
|
||||||
assertEquals(1, interceptors.size());
|
assertEquals(1, interceptors.size());
|
||||||
assertEquals(JsonViewResponseBodyAdvice.class, interceptors.get(0).getClass());
|
assertEquals(JsonViewResponseBodyAdvice.class, interceptors.get(0).getClass());
|
||||||
|
|
||||||
|
LocaleContextHolder.setLocale(Locale.ENGLISH);
|
||||||
|
try {
|
||||||
|
ResponseStatusExceptionResolver rser = (ResponseStatusExceptionResolver) expectedResolvers.get(1);
|
||||||
|
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/");
|
||||||
|
MockHttpServletResponse response = new MockHttpServletResponse();
|
||||||
|
rser.resolveException(request, response, context.getBean(TestController.class), new UserAlreadyExistsException());
|
||||||
|
assertEquals("User already exists!", response.getErrorMessage());
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
LocaleContextHolder.resetLocaleContext();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -289,6 +308,13 @@ public class WebMvcConfigurationSupportTests {
|
||||||
public TestController testController() {
|
public TestController testController() {
|
||||||
return new TestController();
|
return new TestController();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public MessageSource messageSource() {
|
||||||
|
StaticMessageSource messageSource = new StaticMessageSource();
|
||||||
|
messageSource.addMessage("exception.user.exists", Locale.ENGLISH, "User already exists!");
|
||||||
|
return messageSource;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
|
@ -345,4 +371,8 @@ public class WebMvcConfigurationSupportTests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "exception.user.exists")
|
||||||
|
public static class UserAlreadyExistsException extends RuntimeException {
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue