spring boot restful api 方法引數 BindException 異常處理
阿新 • • 發佈:2018-11-05
客戶端 post json 資料,api 方法 接收的引數綁定出現異常,丟擲 BindException 異常,可以按照如下的方式處理
1、方法引數中增加 BindingResult 引數,通過 bindingResult.hasErrors() 判斷是否出錯
2、在 配置類中重寫 addFormatters 方法
@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter
@Configuration public class MyWebAppConfigurer extends WebMvcConfigurerAdapter { @Value("${home.page}") private String homePage; @Value("${spring.profiles.active}") private String env; @Bean public HttpMessageConverter<String> responseBodyConverter() { return new StringHttpMessageConverter(Charset.forName("UTF-8")); } @Override public void addFormatters(FormatterRegistry registry) { registry.addConverter(new StringtoDateConverter()); super.addFormatters(registry); } @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("/index.html"); registry.setOrder(Ordered.HIGHEST_PRECEDENCE); super.addViewControllers(registry); } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); FastJsonConfig config = new FastJsonConfig(); config.setSerializerFeatures(SerializerFeature.WriteDateUseDateFormat, SerializerFeature.SkipTransientField, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteNullNumberAsZero); converter.setFastJsonConfig(config); converter.setDefaultCharset(Charset.forName("UTF-8")); super.configureMessageConverters(converters); converters.add(converter); converters.add(responseBodyConverter()); } @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.favorPathExtension(false); super.configureContentNegotiation(configurer); } @Override public void configurePathMatch(PathMatchConfigurer configurer) { configurer.setUseSuffixPatternMatch(true).setUseTrailingSlashMatch(true); } @Override public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) { exceptionResolvers.add(new MyHandlerExceptionResolver()); } }
定義 StringtoDateConverter 類繼承 org.springframework.core.convert.converter.Converter 介面
@Component public class StringToDateConverter implements Converter<String, Date> { private final Logger logger = LoggerFactory.getLogger(getClass()); @Override public Date convert(String source) { if (StringUtils.isNotEmpty(source)) { try { if(source.matches("^\\d{4}-\\d{2}-\\d{2}[^\\r\\t]*")) { return DateUtil.parse(source); } else if(source.matches("^\\d+")) { Date d = new Date(); d.setTime(Long.valueOf(source)); return d; } else { logger.warn("日期引數錯誤:\"{}\"", source); } } catch (Exception e) { e.printStackTrace(); } } return null; } }
目前按照 2 處理,這樣我就不用一個個方法來加引數 BindingResult 引數