Я не могу передать переменную даты конструктору - разбор невозможен - PullRequest
0 голосов
/ 14 апреля 2019

В сервлете, который используется для добавления новой записи в таблицу базы данных, мне нужно передать значение Date в конструктор, однако, если я анализирую аргумент конструктора, я получаю следующую ошибку

"необработанное исключение: java.text.ParseException"

Когда я пытаюсь выполнить синтаксический анализ с помощью try catch, прежде чем поместить значение в конструктор, это значение считается не инициализированным.

Это класс сущности

@Entity
@Table(name = "doctors")
@Data
public class Doctors implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "Id")
    private Integer id;
    @Column(name = "Name")
    private String name;
    @Column(name = "Surname")
    private String surname;
    @Column(name = "Title")
    private String title;
    @Column(name = "LicenseNumber")
    private String licenseNumber;
    @Column(name = "Phone")
    private String phone;
    @Column(name = "Email")
    private String email;
    @Column(name = "Nationality")
    private String nationality;
    @Column(name = "Speciality")
    private String speciality;
    @Column(name = "DateofBirth")
    private LocalDate dateOfBirth;
    @Column(name = "IsaTeacher")
    private Boolean isATeacher;

    public Doctors() {
    }

    public Doctors(Integer id, String name, String surname, String title, String licenseNumber, String phone, String email, String nationality, String speciality, LocalDate dateOfBirth, Boolean isATeacher) {
        this.id = id;
        this.name = name;
        this.surname = surname;
        this.title = title;
        this.licenseNumber = licenseNumber;
        this.phone = phone;
        this.email = email;
        this.nationality = nationality;
        this.speciality = speciality;
        this.dateOfBirth = dateOfBirth;
        this.isATeacher = isATeacher;
    }
}

Это значение, которое я получаю из http запроса

String dateOfBirth = req.getParameter("dateOfBirth");

Это мои попытки заставить его работать. Это дает «необработанное исключение: java.text.ParseException»

Doctors doctor = new Doctors(name, surname, title, licenseNumber, phone, email, nationality, speciality, new SimpleDateFormat("yyyy-MM-dd").parse(dateOfBirth), Boolean.valueOf(isATeacher));

и эта "переменная не инициализирована"

DateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date1;
        try {
            date1 = simpleDateFormat.parse(dateOfBirth);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Doctors doctor = new Doctors(name, surname, title, licenseNumber, phone, email, nationality, speciality, date1, Boolean.valueOf(isATeacher));

Я действительно не знаю, что делать. Я должен обработать исключение, чтобы проанализировать String на сегодняшний день, но тогда переменная не видна за пределами блока try.

1 Ответ

2 голосов
/ 14 апреля 2019

Вашему конструктору Doctors нужен аргумент LocalDate, а не Date (что хорошо, потому что Date плохо спроектирован и сильно устарел, в то время как LocalDate принадлежит java.time, современной и гораздо более приятной Java API даты и времени).

Дополнительный бонус, при разборе LocalDate выбрасывает не проверено , а не проверенное исключение в случае сбоя синтаксического анализа, поэтому компилятор не возражает.

Дополнительный дополнительный бонус, LocalDate анализирует ваш формат, yyyy-MM-dd, по умолчанию, то есть без какого-либо явного средства форматирования. Это связано с тем, что формат соответствует стандарту ISO 8601.

    Doctors doctor = new Doctors(name, surname, title, licenseNumber, phone,
            email, nationality, speciality, LocalDate.parse(dateOfBirth),
            Boolean.valueOf(isATeacher));

Ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...