org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'location' on field 'code': rejected value [沪]; codes [ValidLocationCode.location.code,ValidLocationCode.code,ValidLocationCode.java.lang.String,ValidLocationCode]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [location.code,code]; arguments []; default message [code]]; default message [Location 沪 already exists]
原因是Controller的edit方法中参数顺序错误,BindingResult需放在location后面
@RequestMapping(value="/edit/{locationId}", method = RequestMethod.PUT)
@PreAuthorize("hasRole('LOCATION_UPDATE')")
public ModelAndView edit(@Valid @ModelAttribute("location") Location location, BindingResult result, @PathVariable("locationId") Long locationId, RedirectAttributes redirectAttributes) {
if(result.hasErrors()) {
ModelAndView modelAndView = createModelAndView("location/form", locationListMenuConfig);
modelAndView.addObject("locationTypes", LocationType.values());
return modelAndView;
}
try {
locationService.edit(locationId, location);
redirectAttributes.addFlashAttribute(ALERT_MESSAGE, AlertMessage.success(UPDATE_SUCCESS));
return backToMainPage();
} catch(ValidationException e) {
ModelAndView modelAndView = createModelAndView("location/form", locationListMenuConfig);
modelAndView.addObject(ALERT_MESSAGE, AlertMessage.error(e.getErrorCode(), e.getParameters()));
modelAndView.addObject("locationTypes", LocationType.values());
return modelAndView;
}
}