gpt4 book ai didi

java - 带有 MongoDB POST 和 GET 记录的 Spring Controller

转载 作者:行者123 更新时间:2023-12-01 10:02:32 25 4
gpt4 key购买 nike

当我想在数据库中发布某些内容并检索它时,我需要帮助理解如何以及为什么应该使用 Controller 。当我只使用 Post.java 和 PostRepository.java 时,当我插入数据以及在“/posts”路径中检索整个数据库时,它似乎可以工作。在文件中,我有一个包含所有条目的 posts 数组。

Post.java

public class Post {

@Id private long id;

private String content;
private String time;
private String gender;
private String age;


// Constructors

public Post() {

}

public Post(long id, String content, String time, String gender, String age) {
this.id = id;
this.content = content;
this.time = time;
this.gender = gender;
this.age = age;
}

// Getters

public String getContent() {
return content;
}

public long getId() {
return id;
}

public String getTime() {
return time;
}

public String getGender() {
return gender;
}

public String getAge() {
return age;
}

PostRepository.java

@RepositoryRestResource(collectionResourceRel = "posts", path = "posts")
public interface PostRepository extends MongoRepository<Post, String> {

List<Post> findPostByContent(@Param("content") String content);
}

PostController.java

@RestController
public class PostController {

private final AtomicLong counter = new AtomicLong();

//Insert post in flow
@RequestMapping(value="/posts", method = RequestMethod.POST)
public Post postInsert(@RequestBody Post post) {
return new Post(counter.incrementAndGet(), post.getContent(), post.getTime(), post.getGender(), post.getAge());
}

//Get post in flow
@RequestMapping(value="/posts", method = RequestMethod.GET)
public Post getPosts() {
return null; //here I want to return all posts made using postInsert above.
}
}

当我使用 Controller 时,我可以发布数据,但它不会保存在 json 文件中,因此当我重新启动应用程序时,我会再次从 id: 1 开始。然而,如果没有 Controller ,数据就会被保存。为什么会发生这种情况?我该如何安排才能使用 Controller 保存数据?我知道这可能是一个愚蠢的问题,但我不知道该怎么办。

最佳答案

Controller 用于管理通过您的应用发出的请求。无论您使用 @RestController 还是 @Controller 都会给出完全不同的结果。

因此,REST 方法是将对象视为资源。这里 JSON 是表示您要公开的资源的默认格式。

使用 PostRepository 时,您必须在存储中正确保存数据,然后再使用 return 语句公开它们(例如 return 仅以 JSON 格式显示资源(您的帖子))。要保存帖子,您必须使用 MongoRepository 的 save() 方法

    //Insert post in flow 
@RequestMapping(value="/posts", method = RequestMethod.POST)
public Post postInsert(@RequestBody Post post) {

// you have to use your repository to be able to CRUD operations in the store

final PostRepository postRepository;

// save the post in the store

postRepository.save(new Post(counter.incrementAndGet(), post.getContent(), post.getTime(), post.getGender(), post.getAge()));

HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setLocation(ServletUriComponentsBuilder
.fromCurrentRequest().build().toUri());

return new ResponseEntity<>(null, httpHeaders, HttpStatus.CREATED);
}

ResponseEntity 旨在表示整个 HTTP 响应。您可以控制其中的任何内容:状态代码、 header 和正文。

要获取商店中的所有帖子,您可以使用存储库来保存数据。

    //Get post in flow
@RequestMapping(value="/posts", method = RequestMethod.GET)
public Post getPosts() {
return this.postRepository.findAll();
}

关于java - 带有 MongoDB POST 和 GET 记录的 Spring Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36691785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com