DefaultHandlerExceptionResolver не удалось привязать элемент запроса

#java #spring #spring-mvc

#java #весна #spring-mvc

Вопрос:

Result.java:

 public class Result {

    private Float weight;
    private Float series;
    private Float rep;
    private String doneDate;
    public Float getWeight() {
        return weight;
    }
    public void setWeight(Float weight) {
        this.weight = weight;
    }
    public Float getSeries() {
        return series;
    }
    public void setSeries(Float series) {
        this.series = series;
    }
    public Float getRep() {
        return rep;
    }
    public void setRep(Float re) {
        this.rep = rep;
    }
    public String getDoneDate() {
        return doneDate;
    }
    public void setDoneDate(String doneDate) {
        this.doneDate = doneDate;
    }


}
  

результат.jsp (фрагмент с формой)

 <form:form method="POST" modelAttribute="resultForm" class="form-signin" action="/main/result/${object.id}">
    <spring:bind path="weight">
        <div class="form-group ${status.error ? 'has-error' : ''}" style="display: inline;">
            <form:input style="width:30%" type="text" path="weight" class="form-control resultsave"></form:input>
        </div>
    </spring:bind>/
    <spring:bind path="series">
        <div class="form-group ${status.error ? 'has-error' : ''}" style="display: inline;">
            <form:input style="width:30%" type="text" path="series" class="form-control resultsave" ></form:input>
        </div>
    </spring:bind>/
    <spring:bind path="rep">
        <div class="form-group ${status.error ? 'has-error' : ''}" style="display: inline;">
            <form:input style="width:30%" type="text" path="rep" class="form-control resultsave" ></form:input>
        </div>
    </spring:bind>
    <br/>
    <spring:bind path="doneDate">
        <div class="form-group ${status.error ? 'has-error' : ''}" style="display:inline">
            <form:input type="text" id="datepicker" path="doneDate" class="form-control resultsave"  value="${date}"></form:input>
        </div>
    </spring:bind>
    <br />
    <button class="btn btn-lg btn-primary btn-block overlayLink button big alt" type="submit">Zapisz wyniki</button>

</form:form>
  

и контроллер для POST метода

 @RequestMapping(value = "/main/result/{id}", method = RequestMethod.POST)
    public String save(@ModelAttribute("resultForm") Result result, @PathVariable("id") Long id, BindingResult bindingResult, Model model,Principal principal){

        Exercise exercise = exerciseService.findById(id);
        if(exercise.getUsername().equals(principal.getName())){
            resultValidator.validate(result, bindingResult);

            return "redirect:main";
        }
        else
            return "redirect:main";
    }
  

Валидатор (я все прокомментировал, потому что не был уверен, что вызывает мою проблему):

 @Component
public class ResultValidator implements Validator{

    @Override
    public boolean supports(Class<?> aClass) {
        return Result.class.equals(aClass);
    }

    @Override
    public void validate(Object o, Errors errors) {
        Result result = (Result)o;
     /*   if (isFloat("" result.getWeight())) {
            errors.rejectValue("weight", "form.weight.numberformat");
        }
        if (isFloat("" result.getSeries())) {
            errors.rejectValue("series", "form.serie.numberformat");
        }
        if (isFloat("" result.getRep())) {
            errors.rejectValue("rep", "rep.numberformat");
        }*/

    }

    public Boolean isFloat(String validate){
        try{
            Float f = Float.parseFloat(validate.toString());
            return true;
        }catch (NumberFormatException e){
            return false;
        }
    }

}
  

однако каждый раз, когда я отправляю форму, я получаю неверный запрос, может ли кто-нибудь указать мне, что я делаю неправильно?

13:46:55,838 ПРЕДУПРЕЖДЕНИЕ [org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver] (задача по умолчанию-62) Не удалось привязать элемент запроса: org.springframework.web.method.annotation.Методаргументтипемисматчисключение: не удалось преобразовать значение типа [java.lang.Строка] к требуемому типу [java.lang.Long]; вложенным исключением является исключение java.lang.NumberFormatException: для входной строки: «main»

Комментарии:

1.Согласно трассировке стека, он пытается преобразовать a String в a Long , и единственное Long , что у вас есть в этом фрагменте кода, — это the id , вы должны убедиться, что PathVariable id он правильно предоставлен, как вы ожидаете, проверьте результат /main/result/${object.id} в сгенерированном HTML-коде.

Ответ №1:

Передаваемое значение id должно быть числом (длинным), но при нажатии кнопки () вы передаете строковое значение /main/result/${object.id} , которое нельзя преобразовать в число. Пожалуйста, поделитесь полной страницей jsp.