spring-boot - 无法将“java.lang.String”类型的值转换为所需的“int”类型;
问题描述
将 id 值传递给控制器会产生错误“无法将类型 'java.lang.String' 的值转换为所需的类型 'int'”。
但是当我打印 System.out.println(studentService.findById(id)) 时,它会在终端中输出 Optional[Student{id=1, firstName='Abhishek', lastName='Shukla', branch='CS',年=4,手机号码='9876543210'}]
我已经尝试将 id 作为字符串传递,并通过在控制器中使用 Integr.parseInt(id) 将字符串转换为 int,但它会抛出错误,因为“ Servlet.service() for servlet [dispatcherServlet] 在上下文中带有路径 [] 抛出异常 [请求处理失败;嵌套异常是 java.lang.NumberFormatException:对于输入字符串:“{id}”],根本原因是“
<h1>Student Place</h1>
<form name="myForm" action="/student/{id}" >
<table border="1">
<tbody>
<tr>
<td>Student ID :</td>
<td><input type="text" name="id" size="10" /> </td>
</tr>
</tbody>
</table>
<br>
<input type="submit" value="submit" name="submit" /><br>
<input type="reset" value="Rest" name="reset" />
</form>
@Controller
public class StudentController {
@Autowired
private StudentService studentService ;
@GetMapping(value = "/students")
public String index(ModelMap modelMap){
modelMap.put("students" , studentService.findAll());
return "index" ;
}
@GetMapping(value = "/student/{id}")
public String data(@PathVariable("id") int id , ModelMap modelMap){
modelMap.put("students" , studentService.findById(id)) ;
System.out.println(studentService.findById(id));
return "studentbyid" ;
}
@GetMapping(value = "/student")
public String databyid(){
return "student" ;
}
}
public interface StudentService {
public Iterable<Student> findAll() ;
public Optional<Student> findById(int id) ;
}
@Transactional
@Service("studentService")
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentRepository studentRepository ;
@Override
public Iterable<Student> findAll() {
return studentRepository.findAll();
}
public Optional<Student> findById(int id) {
return studentRepository.findById(id);
}
}
@Entity
@Table(name = "student")
public class Student {
@Id
@Column(name="id")
private int id ;
@Column(name="first_name")
private String firstName ;
@Column(name="last_name")
private String lastName ;
@Column(name="branch")
private String branch ;
@Column(name="year")
private int year ;
@Column(name="mobile_number")
private String mobileNumber ;
public Student() {
}
public Student(int id, String firstName, String lastName, String branch, int year, String mobileNumber) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.branch = branch;
this.year = year;
this.mobileNumber = mobileNumber;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getBranch() {
return branch;
}
public void setBranch(String branch) {
this.branch = branch;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public String getMobileNumber() {
return mobileNumber;
}
public void setMobileNumber(String mobileNumber) {
this.mobileNumber = mobileNumber;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", branch='" + branch + '\'' +
", year=" + year +
", mobileNumber='" + mobileNumber + '\'' +
'}';
}
}
Whitelabel 错误页面 此应用程序没有针对 /error 的显式映射,因此您将其视为后备。
出现意外错误(类型=错误请求,状态=400)。无法将“java.lang.String”类型的值转换为所需的“int”类型;嵌套异常是 java.lang.NumberFormatException:对于输入字符串:“{id}”
解决方案
您的表单的操作是
action="/student/{id}"
因此,正如错误消息所示,您实际上是在向/student/{id}
而不是发送请求,比方说/student/1234
.
显然,表单有一个输入字段,用户必须在其中输入 ID,ID 将作为请求参数发送,而不是作为路径变量,因此控制器方法和操作的路径应该是
/students
它应该将 ID 作为请求参数:
@GetMapping(value = "/student")
public String data(@RequestParam("id") int id, ModelMap modelMap)
推荐阅读
- parsing - 谷歌表格导入范围
- java - WebConfig:使用@bean 还是方法方式?
- javascript - 从 AntDesign 更改选择标签
- r - 为什么不使用 as.integer 检查数字是否为整数?
- python - Pytesseract 无法读取屏幕截图上的数字
- mysql - Laravel:原始 sql 子查询
- python - 如何在单个工作表上排列输出 dfs
- angular - 根据路由变量从数组中搜索静态数据?
- python - 用于 cell.value 和 cell.internal_value 的 Openpyxl 错误:“int”对象没有属性“internal_value”
- mule - Deflate 在 mule 中压缩字符串