java - Spring boot一对多连接从数据库获取重复的json

标签 java spring spring-boot spring-mvc jpa

产品.java

@Entity @Table(name="product") public class Product {
          // ...
          @ManyToOne @JoinColumn(name="product_id")
          private Brand brand;
          // getters and setters
}

品牌.java

@Entity @Table(name="brand") public class Brand {
          // ....
          @OneToMany(mappedBy="brand", cascade = CascadeType.ALL)
          private Set<Product> products;
}

BrandRepository.java

@Repository public interface BrandRepository extends JpaRepository<Brand, Long>{}

BrandController.java

@RestController @RequestMapping("/api/v1")
public class BrandController {
          @Autowired private BrandRepository brandRepository;

          @GetMapping("/brands")
          public List<Brand> getAllBrands(){
                    return brandRepository.findAll();
          }
          @GetMapping("/brand/{id}")
          public ResponseEntity<Brand> getBrand(@PathVariable(value="id") Long bid) throws ResourceNotFoundException {
                    Brand brand = brandRepository.findById(bid).orElseThrow(() -> new ResourceNotFoundException("user not found"+bid));
                    return ResponseEntity.ok().body(brand);
          }
}

每当我尝试访问/brands 或/brand/1 时,我都会收到如下重复的 json 结果:

对于“http://127.0.0.1:8080/api/v1/brands

[{"id":1,"name":"Apple","products":[{"id":4,"name":"Apple kndsksk ksjdsoijd sd","price":"2893787","brand":{"id":1,"name":"Apple","products":[{"id":4,"name":"Apple kndsksk ksjdsoijd sd","price":"2893787","brand":{"id":1,"name":"Apple","products":[{"id":4,"name":"Apple kndsksk ksjdsoijd sd","price":"2893787","brand":{"id":1,"name":"Apple","products":[{"id":4,"name":"Apple 
... and continues

对于“http://127.0.0.1:8080/api/v1/brand/1

{"id":1,"name":"Apple","products":[{"id":1,"name":"Apple kksf sfok sokoak","price":"9239932","brand":{"id":1,"name":"Apple","products":[{"id":1,"name":"Apple kksf sfok sokoak","price":"9239932","brand":{"id":1,"name":"Apple","products":[{"id":1,"name":"Apple kksf sfok sokoak","price":"9239932","brand":{"id":1,"name":"Apple","products":[{"id":1,"name":"Apple kksf sfok sokoak","price":"9239932","brand":{"id":1,"name":"Apple","products":[{"id":1,"name":"Apple kksf sfok sokoak","price":"9239932","brand":{"id":1,"name":"Apple","products":[{"id":1,"name":"Apple kks 
... and continues

最佳答案

您可以使用@JsonIgnore注释来抑制这种无限循环。例如:

@JsonIgnore
@ManyToOne @JoinColumn(name="product_id")
private Brand brand;

关于java - Spring boot一对多连接从数据库获取重复的json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61173816/

相关文章:

java - Spring Boot Netty Web 应用程序的吞吐量

java - 如何在多模块 Maven SVN 项目中的另一个模块中正确使用另一个模块的类?

java - 计算机重新启动后 Spring 无法连接到 mysql 数据库我该如何诊断问题所在

spring-boot - Spring boot 服务器启动问题 elasticsearch

java - Class#isAssignableFrom 和拆箱/装箱

java - 解析 java 源代码以查找注释中的特定单词,然后使用下面的代码

java - 带有 Spring Cloud Netflix Eureka 的 Node.js 客户端应用程序

java - Apache CXF Maven 发行版和 CXF 发行版之间的区别

java - Spring Security accountNonExpired凭据NonExpired实现

java - 使用 JUnit Test 的远程配置启动 Spring Boot 上下文