나는 같은 복잡한 유형을 정의하는 나의 봄 데이터 REST 응용 프로그램에서 롬복을 사용하는 경우 : 스프링 데이터 REST와봄 데이터 REST : "아무 문자열 인수 생성자/팩토리 메소드는 문자열 값에서 역 직렬화 없습니다"
@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity
@Table(name = "BOOK")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable = false)
private Long id;
private String title;
@ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH})
private Person author;
// ...
}
컨트롤러는 같은 : 봄 데이터 REST의 사용으로
no String-argument constructor/factory method to deserialize from String value
:
@RepositoryRestController
public class BookRepositoryRestController {
private final BookRepository repository;
@Autowired
public BookRepositoryRestController(BookRepository repository) {
this.repository = repository;
}
@RequestMapping(method = RequestMethod.POST,value = "/books")
public @ResponseBody PersistentEntityResource post(
@RequestBody Book book,
PersistentEntityResourceAssembler assembler) {
Book entity = processPost(book);
return assembler.toResource(entity);
}
private Book processPost(Book book) {
// ...
return this.repository.save(book);
}
}
내가 못생긴 오류 책 POST와 잭슨 좋아 잭슨은 하나의 고유
Person
에 해결해야
/people/123
지역 URI를 해결하려고 할 때
curl -X POST
-H 'content-type: application/json'
-d '{"title":"Skip Like a Pro", "author": "/people/123"}'
http://localhost:8080/api/books/
탈 직렬화 오류가 발생합니다. @RepositoryRestController
을 제거하면 정상적으로 작동합니다. REST 컨트롤러 정의에 어떤 문제가 있습니까? @RepositoryRestController
에서
안녕하세요 Jan, 왜 AllArgsConstructor에서 suppressConstructorProperties = true를 사용하고 있습니까? Lombok dosumentation은 다음과 같이 말합니다. 'true로 설정하면 lombok은 @ java.beans.ConstructorProperties를 생성 된 생성자에 추가하지 않습니다. 이것은 안드로이드와 GWT 개발에서 유용하다. 권장 사례에 해당하지 않는 것으로 보입니다. 이 구성을 제거하면 어떻게됩니까? – avi613
Lombock에서 @Data 주석을 확인하십시오. equals 및 해시 코드를 생성합니다. – avi613
@ avi613 - 불행하게도 Jackson의 직렬화 해제로 인해 @AllArgsConstructor (suppressConstructorProperties = true)가없는 위의 오류가 발생합니다. 이는 아마도 Lombok 버그 일 수 있습니다. –