在SpringBoot中返回空对象的GET请求

hc2pp10m  于 2023-02-28  发布在  Spring
关注(0)|答案(4)|浏览(208)

我创建了一个SpringBoot应用程序,它与react frontend UI交互。我想确保数据通过API正确传入,所以我尝试在Postman中使用GET请求。响应返回一个空对象,而不是来自数据库的数据。这是我想要的。我可以没有问题地发布,没有错误地编译。所有的文件都在同一个包里。我在表中有两行对应于两个开括号,我只是没有得到数据。

实体类

@ToString
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "game_articles")
public class Articles {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "title")
    private String title;

    @Column(name = "reviewer")
    private String reviewer;

    @Column(name = "review")
    private String review;

    @Column(name = "path")
    private String path;

    @Column(columnDefinition = "integer default 0")
    private int comments;

    public Articles(String title, String reviewer, String review, String path, int comments){
        this.title = title;
        this.reviewer = reviewer;
        this.review = review;
        this.path = path;
        this.comments = comments;
    }

}

控制器:注解方法是我的第一次尝试。

@CrossOrigin(origins = "http://localhost:3000")
@RequestMapping("/api/v1")
@RestController
@AllArgsConstructor
public class ArticlesController {

    @Autowired
    ArticlesRepository articlesRepository;

    @GetMapping("/articles")
    public List<Articles> getAllArticles(){
//        createArticle();
        return articlesRepository.findAll();
    }

    public void createArticle(){ //ignore
    Articles a = new Articles(1L,"Title Test", "TyTest", "This is a test review", "path/totest", 10);
        articlesRepository.save(a);
    }

//    @GetMapping("/articles")
//    public ResponseEntity<List<Articles>> getAllArticles(){
//        try {
////            articlesRepository.findAll().forEach(articles::add);
//            return new ResponseEntity<>(articles, HttpStatus.OK);
//        }
//        catch (Exception e){
//            return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
//        }
//    }
}

存储库

@Repository
public interface ArticlesRepository extends JpaRepository<Articles, Long> {
}

日志中的SQL查询。我不确定为什么将列作为articles0引用,但这对向数据库添加数据没有影响。

Hibernate: 
    select
        articles0_.id as id1_0_,
        articles0_.comments as comments2_0_,
        articles0_.path as path3_0_,
        articles0_.review as review4_0_,
        articles0_.reviewer as reviewer5_0_,
        articles0_.title as title6_0_ 
    from
        game_articles articles0_

ubof19bj

ubof19bj1#

我尝试复制您的问题,因为您使用的是lombok,我建议您尝试在您的Articles实体中使用@Data

@Entity
@Data
@Table(name = "game_articles")
public class Articles {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "title")
    private String title;

    @Column(name = "reviewer")
    private String reviewer;

    @Column(name = "review")
    private String review;

    @Column(name = "path")
    private String path;

    @Column(columnDefinition = "integer default 0")
    private int comments;

}

它将为实体生成所有的**@Getter@Setter**方法,当从存储库查询数据时,实体需要这些方法,还将生成@RequiredArgsConstructor@ToString@EqualsAndHashCode
希望能帮到你。

x0fgdtte

x0fgdtte2#

Articles类似乎缺少用于其属性的getter和setter方法。我建议使用Lombok自动生成这些方法。如果您不熟悉Lombok,您可以通过here了解更多信息。或者,您可以手动为Articles类的属性编写自己的getter和setter方法。

z5btuh9x

z5btuh9x3#

我在Articles实体中添加了**@Getter@Setter**,之后它运行良好。

4c8rllxm

4c8rllxm4#

只需在GET方法的主体中放入以下行

return ResponseEntity.ok(articlesRepository.findAll());

相关问题