类型参数 'S' 的推断类型 'S' 不在其边界内;应延长'com.data.assignment.domain.Post'



我试图做一个简单的数据插入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;
}

相关内容