【问题标题】:DefaultHandlerExceptionResolver Failed to bind request elementDefaultHandlerExceptionResolver 绑定请求元素失败
【发布时间】:2017-02-18 21:41:09
【问题描述】:

结果.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;
    }


}

result.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.MethodArgumentTypeMismatchException: 无法将类型 [java.lang.String] 的值转换为所需类型 [java.lang.Long];嵌套异常是 java.lang.NumberFormatException: 对于输入字符串:“main”

【问题讨论】:

  • 根据堆栈跟踪,它尝试将 String 转换为 Long 并且您在此代码 sn-p 中拥有的唯一 Longid,您应该确保 PathVariable id 正确提供,在生成的 HTML 代码中检查 /main/result/${object.id} 的结果。

标签: java spring spring-mvc


【解决方案1】:

传递的 id 值应该是一个数字(长整型),但您在点击 (/main/result/${object.id}) 时传递了一个字符串值,该值无法转换为数字。请分享完整的jsp页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 2021-12-16
    • 2019-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多