工作中遇到的问题--BindException

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;
        }
    }

原文地址:https://www.cnblogs.com/ly-radiata/p/4798299.html