我试图做一个简单的数据插入H2数据库,但我最终得到错误
Inferred type 'S' for type parameter 'S' is not within its bound; should extend 'com.carepay.assignment.domain.Post'
我的控制器
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
PostDetails createPost(@Valid @RequestBody CreatePostRequest createPostRequest) {
return postService.createPost(createPostRequest);
}
我的服务public interface PostService {
PostDetails createPost(@Valid CreatePostRequest createPostRequest);
Page<PostInfo>getPosts(final Pageable pageable);
PostDetails getPostDetails(Long id);
void deletePost(Long id);
}
我实现这就是我得到错误的地方
@Service
public class PostServiceImpl implements PostService {
@Autowired
private PostRepository postRepository;
@Override
public PostDetails createPost(@Valid CreatePostRequest createPostRequest) {
CreatePostRequest createResponse = postRepository.save(createPostRequest);
return createResponse;
}
我的存储库
@Repository
public interface PostRepository extends JpaRepository<Post, Long> {
}
my domain classes
我的createpostquest类
public class CreatePostRequest {
private String title;
private String content;
}
我的PostDetails类
public class PostDetails extends PostInfo {
private String content;
}
My PostInfo class
public class PostInfo {
private Long id;
private String title;
}
和我的Post模型
@Entity
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String title;
private String content;
}
如何让API将数据发布到数据库。我没有做过调查。提前谢谢你
在您的PostService
中,您试图在
CreatePostRequest
CreatePostRequest createResponse = postRepository.save(createPostRequest);
但是你的PostRepository
知道Post
而不知道CreatePostRequest
。您必须从CreatePostRequest
中提取Post
对象,并将其传递给存储库的save方法。
此外,您的方法返回相同类型的CreatePostRequest
=>CreatePostRequest createResponse = ...
代替PostDetails
下面我改变了createPost
方法,你只需要把缺失的部分
@Override
public PostDetails createPost(@Valid CreatePostRequest createPostRequest) {
Post post = new Post();
post.setTitle(createPostRequest.getTitle());
post.setContent(createPostRequest.getContent());
Post savedPost = postRepository.save(post);
PostDetails postDetails = new PostDetails();
postDetails.setId(savedPost.getId());
postDetails.setTitle(savedPost.getTitle());
postDetails.setContent(savedPost.getContent());
return postDetails;
}