Не удалось преобразовать значение типа 'java.lang.String' в требуемый тип 'int'; - PullRequest
0 голосов
/ 23 июня 2019

при передаче значения идентификатора в контроллер выдается ошибка «Не удалось преобразовать значение типа« java.lang.String »в требуемый тип« int »».

но когда я печатаю System.out.println (studentService.findById (id)), он выдает вывод в терминале как Необязательно [Student {id = 1, firstName = 'Abhishek', lastName = 'Shukla', филиал = 'CS', год = 4, mobileNumber = '9876543210'}]

Я уже пытался передать идентификатор в виде строки и преобразовать строку в int, используя Integr.parseInt (id) в контроллере, но он выдает ошибку как "Servlet.service () для сервлета [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}"

1 Ответ

0 голосов
/ 23 июня 2019

Действие вашей формы:

action="/student/{id}"

Итак, как показывает сообщение об ошибке, вы буквально отправляете запрос на /student/{id} вместо, скажем, /student/1234.

Поскольку, очевидно, в форме есть поле ввода, в которое пользователь должен ввести идентификатор, идентификатор будет отправлен как параметр запроса, а не как переменная пути, поэтому путь к вашему методу контроллера и вашему действию должен быть просто

/students

и в качестве параметра запроса должен быть указан идентификатор:

@GetMapping(value = "/student")
public String data(@RequestParam("id") int id, ModelMap modelMap) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...