Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring MVC - Failed to convert property value of type 'java.lang.String' to required type 'java.lang.Integer'

Am new to Spring MVC. I have developed a sample application which performs SELECT, INSERT, UPDATE and DELETE.

Below is my Bean class

@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*/

Below is my Controller Class

@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";
}
}

Below is my JSP page

<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>

Now am facing two issues. 1. After entering the values and clicked Add Student button, am getting the below error.

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"]
  1. By default values which I have declared as int are being displayed in my JSP by default as 0. When I changed the phone variable from int to Integer, 0 dint come. Why is it like this?
like image 229
Arpan Sharma Avatar asked Dec 09 '16 10:12

Arpan Sharma


3 Answers

The problem is that value 9962287970 is out of range for type Integer.

Integer.MAX_VALUE < 9962287970 

To fix this change private Integer phone; to private Long phone; OR private String phone;

If you use String you can store other chars like + to the variable phone.

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

The defauld value of int is 0 but for Integer it is not zero since it a object, so you have to initialize the value to 0;

like image 64
Jobin Avatar answered Nov 14 '22 21:11

Jobin


You have exceeded the integer range so either use Long instead of int or make it of String variable type. After applying the changes don't forget to drop the table.

@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;
like image 2
Smit Avatar answered Nov 14 '22 19:11

Smit


Issue 1. see this "nested exception is java.lang.NumberFormatException: For input string: "9962287970"". Since its beyond the range of int. try change it to String or Long.

Issue 2. In Java, int is a primitive type and it is not considered an object. Only objects can have a null value. As soon as the object of an class initialized all primitives set to their default value which is 0 in case of int.

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

like image 1
bbajaj Avatar answered Nov 14 '22 20:11

bbajaj