Spring boot 无法转换类型为';java.lang.String';至所需类型';int';;

Spring boot 无法转换类型为';java.lang.String';至所需类型';int';;,spring-boot,spring-mvc,jsp,Spring Boot,Spring Mvc,Jsp,将id值传递给控制器时会出现错误“未能将“java.lang.String”类型的值转换为所需的“int”类型” 但当我打印System.out.println(studentService.findById(id))时,它在终端中给出一个输出,如下所示 可选[学生{id=1,firstName='Abhishek',lastName='Shukla',branch='CS',year=4,mobileNumber='9876543210'] 我已经尝试将id作为字符串传递,并通过在控制器中使用

将id值传递给控制器时会出现错误“未能将“java.lang.String”类型的值转换为所需的“int”类型”

但当我打印System.out.println(studentService.findById(id))时,它在终端中给出一个输出,如下所示 可选[学生{id=1,firstName='Abhishek',lastName='Shukla',branch='CS',year=4,mobileNumber='9876543210']

我已经尝试将id作为字符串传递,并通过在控制器中使用Integr.parseInt(id)将字符串转换为int,但它在 路径为[]的上下文中Servlet[dispatcherServlet]的Servlet.service()引发异常[请求处理失败;嵌套异常为java.lang.NumberFormatException:对于输入字符串:“{id}”],具有根本原因”

白标错误页 此应用程序没有/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) 

请检查属性文件,并确保在指定属性后未使用分号(;)

如何将jsp表单中的值传递为@PathVariable在您的情况下,您需要使用JavaScript。

@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 + '\'' +
                '}';
    }
}

action="/student/{id}"
/students
@GetMapping(value = "/student")
public String data(@RequestParam("id") int id, ModelMap modelMap)