无法将类型字符串转换为类型long Spring Boot

时间:2018-04-12 16:39:49

标签: java spring jsp spring-boot h2

我正在尝试使用表单向我的数据库添加double类型的值。但是,当我尝试这样做时,我收到一个错误说明:

  

无法将[java.lang.String]类型的值转换为所需类型   [com.javainuse.model.Grade];嵌套异常是   org.springframework.core.convert.ConversionFailedException:失败   从类型[java.lang.String]转换为类型[java.lang.Long]   价值' 2.1&#39 ;;嵌套异常是java.lang.NumberFormatException:For   输入字符串:" 2.1"

但是,如果我添加整数,则添加条目没有问题。任何人都可以确定我的错误在哪里?我看过类似的问题,但似乎没有任何效果:(我的代码如下:

成绩控制器:

set app = CreateObject("Outlook.Application")
set ns = app.GetNamespace("MAPI")
ns.Logon
set recip = ns.CreateRecipient("Joe The User")
if recip.Resolve Then
  MsgBox recip.Address
End If

成绩库:

@Controller
public class GradeController {

    @Autowired
    private GradeRepository gradeData;

    @RequestMapping(value = "/addNewGrade.html", method = RequestMethod.POST)
    public String newGrade(Grade grade) {

        gradeData.save(grade);
        return ("redirect:/listModules.html");

    }

    @RequestMapping(value = "/addNewGrade.html", method = RequestMethod.GET)
    public ModelAndView addNewGrade() {

        Grade grd = new Grade();
        return new ModelAndView("newGrade", "form", grd);

    }

添加新成绩表格

package com.javainuse.data;

import org.springframework.data.jpa.repository.JpaRepository;

import com.javainuse.model.Grade;

public interface GradeRepository extends JpaRepository<Grade, Long> {

}

成绩模型:

  <form name="form" action="" method="POST">
        <div>
            <label>Grade </label>
            <input name="grade" />
        </div>     
        <div>
            <label>Module</label>
            <select name="moduleid">
                <c:forEach items="${module.rows}" var="row">
                    <option value="${row.id}">${row.modulename}</option>
                </c:forEach>
            </select>
        </div>    
        <div>
            <label>Student</label>
            <select name="studentid">
                <c:forEach items="${student.rows}" var="row">
                    <option value="${row.id}">${row.firstname} ${row.lastname}</option>
                </c:forEach>
            </select>
        </div>    
        <br>
        <input type="submit" value="Submit"/>
    </form>

我的数据库中的数据类型也是双倍的。

2 个答案:

答案 0 :(得分:2)

它尝试将传递的内部表单数据grade绑定到控制器方法参数:

你可以:

  • @ModelAttribute注释添加到您的控制器方法中,如:
@RequestMapping(value = "/addNewGrade.html", method = RequestMethod.POST)
public String newGrade(@ModelAttribute("form") Grade grade) {

    gradeData.save(grade);
    return "redirect:/listModules.html";

}
  • grade类中Grade字段的名称更改为不同的名称(例如value)。

答案 1 :(得分:0)

价值&#39; 2.1&#39;是一个无效的长值。 您可以按如下方式检查相应数据类型的最大值和最小值:

String s="2.1";     
System.out.println(Long.MAX_VALUE);//9223372036854775807
System.out.println(Double.MAX_VALUE);//1.7976931348623157E308

因此,要么更改实体的相应属性的数据类型(使用Double或String),要么进行前端验证以限制输入类型。