Когда я использую Ломбки в моем приложении Spring Data REST определять сложные типы, как:Spring Data 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;
// ...
}
с Spring Data REST контроллеры нравятся:
@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);
}
}
я некрасивая ошибка:
no String-argument constructor/factory method to deserialize from String value
использование Spring Data Rest о Джексон с POST книги, как:
curl -X POST
-H 'content-type: application/json'
-d '{"title":"Skip Like a Pro", "author": "/people/123"}'
http://localhost:8080/api/books/
Ошибка де-сериализации происходит, когда Джексон пытается разрешить /people/123
локальный URI, который должен решить в один, уникальный Person
. Если я удалю свой @RepositoryRestController
, все будет хорошо. Любая идея, что не так с моим определением контроллера REST?
Эй, Ян, почему вы используете suppressConstructorProperties = true в AllArgsConstructor? Lombok dosumentation говорит: «Если установлено значение true, то lombok пропустит добавление @ java.beans.ConstructorProperties к сгенерированным конструкторам. Это полезно в разработке Android и GWT, где эта аннотация обычно недоступна ». Кажется, что вы не попадаете в рекомендуемые случаи. Что произойдет, если вы удалите эту конфигурацию? – avi613
Пожалуйста, проверьте аннотацию @Data в Ломбоке. Он генерирует равные и хэш-коды. – avi613
@ avi613 - к сожалению, десериализация Джексона вызывает вышеупомянутую ошибку без '@AllArgsConstructor (suppressConstructorProperties = true)' - это, вероятно, ошибка Ломбока. –