コントローラーの 1 つでアノテーションを使用していますが、@ExceptionHandler
以外の例外タイプを使用するException.class
と、ページはメッセージを返します
クライアントから送信された要求が構文的に正しくありませんでした。
これが私のコントローラーです:
@Controller
@RequestMapping("/foobar")
public class TodayInHistoryController {
@Autowired(required = true)
private TodayInHistoryService service;
private static final String DATE_FMT = "yyyyMMdd";
/**
*
* @return
*/
@RequestMapping(method = RequestMethod.GET)
public HistoryContent getTodayInHistory(
@RequestParam(value = "date", required = false) Date date) {
if (date != null)
return service.getHistoryContent(date);
return service.getHistoryContent();
}
/**
* Binds URL arguments to their correct object representation.
*
* @param binder
*/
@InitBinder
public void initBinder(WebDataBinder binder) {
// Date object binder
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FMT);
binder.registerCustomEditor(Date.class, new CustomDateEditor(
dateFormat, false));
}
/**
*
* @return
*/
// If I change the value param of the annotation to Exception.class it works fine...
@ExceptionHandler(NumberFormatException.class)
public ModelAndView handleParseException(Exception ex) {
// create and populate Map to hold error data
Map<String, String> errorData = new HashMap<String, String>();
errorData.put("errorMessage","Formatting error occurred");
errorData.put("errorDetails", "None");
// create and return ModelAndView
ModelAndView mv = new ModelAndView();
mv.addAllObjects(errorData);
return mv;
}
}
これが私の春の設定です(関連するもの)
@Configuration
@Import(ServicesConfig.class)
@ImportResource({ "classpath:applicationContext-security.xml",
"classpath:dataSources.xml" })
@EnableWebMvc
@ComponentScan(basePackages = "my.controller")
public class WebConfig {
@Bean
public ViewResolver contentNegotiatingViewResolver() {
ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver();
resolver.setIgnoreAcceptHeader(true);
resolver.setDefaultContentType(MediaType.APPLICATION_JSON);
resolver.setFavorPathExtension(true);
resolver.setOrder(1);
// setup mediaTypes
Map<String, String> mediaTypes = new HashMap<String, String>();
mediaTypes.put("json", "application/json");
mediaTypes.put("xml", "application/xml");
resolver.setMediaTypes(mediaTypes);
// setup defaultViews
List<View> defaultViews = new ArrayList<View>();
defaultViews.add(jsonView());
defaultViews.add(xmlView());
resolver.setDefaultViews(defaultViews);
return resolver;
}
@Bean
public View jsonView() {
return new MappingJacksonJsonView();
}
@Bean
public View xmlView() {
return new MarshallingView(new CastorMarshaller());
}
}