类型参数 'S' 的推断类型 'S' 不在其范围内;应该扩展 'com.data.assignment.domain.Post'

Inferred type 'S' for type parameter 'S' is not within its bound; should extend '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> {
}

我的域名classes

我的创建Post请求class

public class CreatePostRequest {
    private String title;
    private String content;
}

我的Post详情class

public class PostDetails extends PostInfo {
    private String content;
}

我的Post信息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 到 post 的数据导入数据库。我没有研究过运气。提前谢谢你

在您的 PostService 中,您正试图在

中保存一个 CreatePostRequest
CreatePostRequest createResponse = postRepository.save(createPostRequest);

但是您的 PostRepository 知道 Post 而不是 CreatePostRequest。您必须从 CreatePostRequest 中提取 Post 对象并将其传递给存储库的保存方法。

而且你的方法returns同类型的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;
}