【发布时间】:2021-12-06 02:06:51
【问题描述】:
使用@RestController、CrudRepository 和胶水@Services,我提供了对一些基于JPA 的对象的访问。
User 类引用List<Order>,而Order 引用User。
为了打破杰克逊无限递归循环,我通过@JsonIdentityReference(alwaysAsId=true) 替换嵌套对象。但是,springdoc 似乎忽略了它,并且仍然生成指向 Order 而不是例如的 OpenApi Spec Long(id 类)。
如何告诉 springdoc 将 User.orders 映射到 List<Long> 或(甚至更好)映射到 List<OrderId>?
@RestController
public class UsersController {
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "successful operation", content = @Content(array = @ArraySchema(schema = @Schema(implementation = User.class))))
})
@GetMapping("/")
public ResponseEntity<Iterable<User>> listUsers() {
return ResponseEntity.ok(users.findAll());
}
// getters and setters omitted
}
@Entity
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class User {
@Schema(description = "The id of the user", required = true)
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToMany(mappedBy = "order")
@JsonIdentityReference(alwaysAsId=true)
private List<Order> orders = Collections.emptyList();
// getters and setters omitted
}
@Entity
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", nullable = false)
@Schema(required = true)
private Long id;
@ManyToOne
@JoinColumn(name = "user_id")
@JsonIdentityReference(alwaysAsId=true)
private User user;
@OneToMany(mappedBy = "order")
@JsonIdentityReference(alwaysAsId=true)
private List<Product> products = Collections.emptyList();
// getters and setters omitted
}
【问题讨论】:
标签: spring-boot spring-data-jpa jackson openapi springdoc