Невозможно преобразовать значение типа String в требуемый тип PersonDTO для свойства person.JAVA

Программисты JAVA общаются здесь
Anonymous
Невозможно преобразовать значение типа String в требуемый тип PersonDTO для свойства person.

Сообщение Anonymous »

У меня есть класс Tabel, в котором есть человек. Классы Tabel и Person имеют отношение «один ко многим».

Код: Выделить всё

@Entity
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "tabel")
public class Tabel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;
private String comments;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "person_id")
private Person person;

}

@Entity
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor

public class Person {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String lastname;
private String surname;

}
Существуют также DTO

Код: Выделить всё

@Data
@Builder
@EqualsAndHashCode
@Jacksonized
public class TabelDto implements Serializable {
private Long id;
private String comments;
private PersonDto person;
}

@Value
@Builder
public class PersonDto implements Serializable {
Long id;
String name;
String lastname;
String surname;
}
И мой контроллер

Код: Выделить всё

@PostMapping("/addTabel")
public String addTabel(@ModelAttribute TabelDto tabelDto) {
tabelService.save(tabelDto);
return "redirect:/addTabel";
}

@GetMapping("/addTabel")
public String addTabel(Model model) {
TabelDto tabelDto = TabelDto.builder().build();
model.addAttribute("persons", personService.findAllPerson());
model.addAttribute("tabelDTO", tabelDto);
return "addTabel";
}
Мой HTML Thymeleaf

Код: Выделить всё

person:





Register

Когда я пытаюсь отправить POST, я получаю сообщение об ошибке.

Код: Выделить всё

[tabel] [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public java.lang.String by.gus.tabel.controller.TabelController.addTabel(by.gus.tabel.dto.TabelDto): [Field error in object 'tabelDto' on field 'person': rejected value [1]; codes [typeMismatch.tabelDto.person,typeMismatch.person,typeMismatch.by.gus.tabel.dto.PersonDto,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [tabelDto.person,person]; arguments []; default message [person]]; default message [Failed to convert value of type 'java.lang.String' to required type 'by.gus.tabel.dto.PersonDto'; Cannot convert value of type 'java.lang.String' to required type 'by.gus.tabel.dto.PersonDto' for property 'person': no matching editors or conversion strategy found]] ]
Но если вы поместите класс Table вместо TableDTO

Код: Выделить всё

public String addTabel(@ModelAttribute Tabel tabelDto)
тогда всё начинает работать, но хотелось бы работать через DTO, а не напрямую с сущностью.
Как это решить?

Подробнее здесь: https://stackoverflow.com/questions/786 ... operty-per

Вернуться в «JAVA»