我正在尝试使用表单向我的数据库添加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>
我的数据库中的数据类型也是双倍的。
答案 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),要么进行前端验证以限制输入类型。