Jan*_*sen 4 java spring lombok java-8 spring-data-rest
当我在Spring Data REST应用程序中使用Lombok来定义复杂类型时:
@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;
// ...
}
Run Code Online (Sandbox Code Playgroud)
使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
我收到一个丑陋的错误:
no String-argument constructor/factory method to deserialize from String value
Run Code Online (Sandbox Code Playgroud)
从Spring Data REST开始使用Jackson和Book POST:
curl -X POST
-H 'content-type: application/json'
-d '{"title":"Skip Like a Pro", "author": "/people/123"}'
http://localhost:8080/api/books/
Run Code Online (Sandbox Code Playgroud)
当Jackson尝试解析/people/123应解析为单个唯一的本地URI时,会发生反序列化错误Person.如果我删除我的@RepositoryRestController,一切正常.知道我的REST控制器定义有什么问题吗?
Jan*_*sen 11
在@RepositoryRestController,将@RequestBody参数的类型更改Book 为Resource<Book>:
import org.springframework.hateoas.Resource;
// ...
@RequestMapping(method = RequestMethod.POST,value = "/books")
public @ResponseBody PersistentEntityResource post(
@RequestBody Resource<Book> bookResource, // Resource<Book>
PersistentEntityResourceAssembler assembler) {
Book book = bookResource.getContent()
// ...
}
Run Code Online (Sandbox Code Playgroud)
并在Book实体定义中将AllArgsConstructor注释修改为:@AllArgsConstructor(suppressConstructorProperties = true).
有关更多信息,请参阅Spring Data REST#687.
| 归档时间: |
|
| 查看次数: |
11447 次 |
| 最近记录: |