目前,我正在将 Spring Data JPA 2.2.1 与 Spring Boot Web 2.2.1 一起用于 REST API 服务。
对/categories的 getter 调用会返回以下 JSON,这实际上是所需的结果:
[
{
"category1": "A",
"category2": "B",
"subcategories": []
},
{
"category1": "A",
"category2": "B",
"subcategories": [{
"field1": "A",
"field2": "B",
"field3": "C",
"field4": "D"
}]
},
.........
.........
]
实体:
@Entity
@Table(name = "category")
@Getter @Setter
public class Category {
@JsonIgnore
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String category1;
private String category2;
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
private List<Subcategory> subcategories;
}
@Entity
@Table(name = "subcategory")
@Getter @Setter
public class Subcategory {
@JsonIgnore
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@JsonIgnore
private int parent;
private String field1;
private String field2;
private String field3;
private String field4;
}
控制器:
@RestController
public class MyController {
private final DataService dataService;
@Autowired
public MyController(DataService dataService) {
this.dataService = dataService;
}
@GetMapping("/categories")
public List<Category> getAllCategories() {
return dataService.getAllCategories();
}
存储库
public interface MyRepository extends JpaRepository<Category, Long> {
List<MyRepository> findAll();
}
数据服务
@Component
public class DataService {
private MyRepository myRepository;
@Autowired
public DataService(MyRepository myRepository) {
this.myRepository = myRepository;
}
public List<Category> getAllCategories() { return myRepository.findAll(); }
我现在想向我的 API 添加一个新调用/limitedCategories,它不会返回所有字段。例如,应排除父实体的“category2”和嵌套实体的“field4”。
问题:
- 我无法在我的 JPA 存储库中手动选择所需的字段,也不知道如何处理嵌套对象。
- 仅使用 findAll 并使用 @JsonIgnore 排除这些字段的简单想法是不可能的,因为我的第一个请求仍然需要这些字段。
- 在我的存储库中使用 @Query 注释仅获取所需字段时,我找不到为我的 JSON 获取嵌套字段的方法。
提前致谢。
我将 Spring Data JPA 2.2.1 与 Spring Boot Web 2.2.1 一起使用。