类型参数 '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;
}
我正在尝试对 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;
}