Spring MVC-не удалось преобразовать значение свойства типа ' java.яз..Строка 'to required type' java.яз..Целое число'
Я новичок в Spring MVC. Я разработал пример приложения, которое выполняет выбор, вставку, обновление и удаление.
Ниже приведен мой класс бобов
@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>
Сейчас я сталкиваюсь с двумя проблемами.
1. После ввода значений и нажатия кнопки Добавить студента, я получаю ниже ошибку.
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"]
- по умолчанию используются значения, которые я объявил как int. отображается в моем JSP по умолчанию как 0. Когда я изменил переменную телефона с int на Integer, 0 dint пришел. Почему это так?
4 ответов:
Проблема в том, что значение 9962287970 находится вне диапазона для типа
Integer.Integer.MAX_VALUE < 9962287970Чтобы исправить это изменение
private Integer phone;наprivate Long phone;илиprivate String phone;Если вы используете
String, Вы можете хранить другие символы, такие как+в переменнойphone.См. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
Значение по умолчанию
intравно 0, но дляIntegerоно не равно нулю, так как это объект, поэтому вы должны инициализировать значение до 0;
Вы превысили целочисленный диапазон, поэтому либо используйте
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;
Выпуск 1. смотрите это " вложенное исключение-java.яз..NumberFormatException: для входной строки: "9962287970"". Так как он находится за пределами диапазона int. попробуйте изменить его на String или Long.
Выпуск 2. В Java int является примитивным типом и не считается объектом. Только объекты могут иметь нулевое значение. Как только объект класса инициализируется, все примитивы устанавливают значение по умолчанию, равное 0 в случае int.
Https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
Номер телефона-это не номер, это строка цифр.
Например 00159 222 111 и 0159 222 111
- это разные телефонные номера, но одно и то же целое число.
Comments