当前位置: 首页 > 知识库问答 >
问题:

Spring MVC-无法将类型'java.lang.String'的属性值转换为所需的类型'java.lang.Integer'

步博涉
2023-03-14

我是SpringMVC的新手。我开发了一个执行选择,插入,更新和删除的示例应用程序。

下面是我的Bean类

@Id
@Column
private int student_id;
private String name;
private String age;
private String city;
private String country;
private Integer phone;
private int hsc;
private int sslc;
private int college;

/*getter and setters*/

下面是我的控制器类

@Controller
public class StudentController {

private static final Logger logger = Logger.getLogger(StudentController.class);

@Autowired
private StudentService studentService;

@RequestMapping(value = "/students", method = RequestMethod.GET)
public String listStudents(Model model){
    if(logger.isDebugEnabled()){
        logger.debug("listStudents method is executed!");
    }

    logger.error("This is an error message", new Exception("Testing"));
    model.addAttribute("student", new StudentDO());
    model.addAttribute("listStudents", this.studentService.listStudents());
    return "students";
}


@RequestMapping(value = "/students/add", method = RequestMethod.POST)
public String addStudent(@ModelAttribute("student") StudentDO studentDO){
    if(studentDO.getStudent_id() == 0){
        /**new person, add it*/
        this.studentService.addStudent(studentDO);
    }else{
        /**existing person, call update*/
        this.studentService.updateStudent(studentDO);
    }
    return "redirect:/students";
}
}

下面是我的JSP页面

<c:url var="addAction" value="/students/add" ></c:url>

<form:form action="${addAction}" commandName="student">

<table>

<c:if test="${!empty student.name}">
    <tr>
        <td>
            <form:label path="student_id">
                <spring:message text="STUDENT_ID"/>
            </form:label>
        </td>
        <td>
            <form:input path="student_id" readonly="true" size="8"  disabled="true" />
            <form:hidden path="student_id" />
        </td>
    </tr>
</c:if>

<tr>
    <td>
        <form:label path="name">
            <spring:message text="Name"/>
        </form:label>
    </td>
    <td>
        <form:input path="name" />
    </td>
</tr>
<tr>
    <td>
        <form:label path="age">
            <spring:message text="Age"/>
        </form:label>
    </td>
    <td>
        <form:input path="age" />
    </td>
</tr>
<tr>
    <td>
        <form:label path="city">
            <spring:message text="City"/>
        </form:label>
    </td>
    <td>
        <form:input path="city" />
    </td>
</tr>
<tr>
    <td>
        <form:label path="country">
            <spring:message text="Country"/>
        </form:label>
    </td>
    <td>
        <form:input path="country" />
    </td>
</tr>
<tr>
    <td>
        <form:label path="phone">
            <spring:message text="Phone"/>
        </form:label>
    </td>
    <td>
        <form:input path="phone" />
    </td>
</tr>
<tr>
    <td>
        <form:label path="hsc">
            <spring:message text="HSC"/>
        </form:label>
    </td>
    <td>
        <form:input path="hsc" />
    </td>
</tr>
<tr>
    <td>
        <form:label path="sslc">
            <spring:message text="SSLC"/>
        </form:label>
    </td>
    <td>
        <form:input path="sslc" />
    </td>
</tr>
<tr>
    <td>
        <form:label path="college">
            <spring:message text="College"/>
        </form:label>
    </td>
    <td>
        <form:input path="college" />
    </td>
</tr>

<tr>
    <td colspan="2">
        <c:if test="${!empty student.name}">
            <input type="submit" value="<spring:message text="Edit Student"/>" />
        </c:if>
        <c:if test="${empty student.name}">
            <input type="submit" value="<spring:message text="Add Student"/>" />
        </c:if>
    </td>
</tr>

现在我面临两个问题。输入值并单击“添加学生”按钮后,收到以下错误。

org.springframework.validation.BindException:     
org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'student' on field 'phone': rejected value [9962287970]; 
codes [typeMismatch.student.phone,typeMismatch.phone,typeMismatch.java.lang.Integer,typeMismatch]; 
arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [student.phone,phone]; arguments []; 
default message [phone]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.lang.Integer' for property 'phone'; 
nested exception is java.lang.NumberFormatException: For input string: "9962287970"]

共有3个答案

丌官远
2023-03-14

问题1.请参阅“嵌套异常是java.lang.NumberFormatException:For输入字符串:”9962287970“”。因为它超出了int的范围。请尝试将其更改为String或Long。

问题2.在Java中,int是一种基元类型,它不被视为对象。只有对象可以有空值。一旦类的对象初始化了所有设置为默认值的基元,对于int来说,默认值为0。

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

公冶泰
2023-03-14

您已超过整数范围,因此要么使用Long而不是int,要么将其设为String变量类型。应用更改后不要忘记删除表。

@Id
@Column
private int student_id;
private String name;
private String age;
private String city;
private String country;
private Long/String phone;
private int hsc;
private int sslc;
private int college;
湛光华
2023-03-14

问题是值9962287970超出整数类型的范围。

Integer.MAX_VALUE < 9962287970 

要修复此更改私人整数电话;私人长电话;OR私人字符串电话;

如果您使用String,则可以将其他字符(如phone0.05中。

参考http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

int 的 defauld 值为 0,但对于 Integer,它不是零,因为它是一个对象,因此您必须将值初始化为 0;

 类似资料: