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



  1. по умолчанию используются значения, которые я объявил как int. отображается в моем JSP по умолчанию как 0. Когда я изменил переменную телефона с int на Integer, 0 dint пришел. Почему это так?

708   4  

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

    Ничего не найдено.