[英]Graphql in java with complex objects
我在Google以及stackoverflow上進行了大量搜索。 大多數示例來自spring boot。 我是springboot的新手。 我對如何使用graphql獲取數據感到非常困惑。 在下面的示例中,我有一個報告組,其中可以包含多個報告。
如何獲取組的詳細信息以及自定義報告的詳細信息?
我應該使用什么? 解析器/ DataFetcher?
如果解析器請幫助我進行適當的解釋
結果應為:
{
group{
name : xyz
reports [
{
id:7
name : report1
},
{
id:8
name : report2
},
{
id:9
name : report3
}
]
}
}
ReportGroup類別
@Entity
@Table(name = "reportgroup")
public class ReportGroup{
private String name;
private List<CustomReport> customReports;
}
public String getName() {
return this.name;
}
public void setName(final String name) {
this.name = name;
}
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "report_group_custom_report", joinColumns = {
@JoinColumn(name = "REPORT_GROUP_ID") }, inverseJoinColumns = {
@JoinColumn(name = "CUSTOM_REPORT_ID") })
public List<CustomReport> getCustomReports() {
return this.customReports;
}
REST API調用,可返回組以及報告
@RequestMapping(value = "/secure/getReportGroupDetail/{name}", method = RequestMethod.POST)
public ResponseBody<GroupDTO> getReportGroupDetail(
@PathVariable("id") final Integer id,
final HttpServletRequest request) throws RecordNotFoundException {
final ReportGroup group = this.reportGroupService.getReportGroupDetail(id);
return new ResponseBody(dto, Constants.SUCCESS);
}
GroupService.java
@Transactional(readOnly = true)
public ReportGroup getReportGroupDetail(final Integer id){
return this.reportGroupDAO
.findById(id);
}
架構:
schema {
query: Query
}
type Query {
reportgroup:ReportGroup
}
type ReportGroup{
name:String!,
customReport : [CustomReport]
}
數據讀取器
public class ReportGroupDataFetcher implements DataFetcher<ReportGroup> {
@Autowired
ReportGroupService reportGroupService;
@Override
public Group get(final DataFetchingEnvironment env) {
Group group = this.reportGroupService.getReportGroupDetail(1);
return group;
}
}
控制器
@RequestMapping(value = "/secure/getGroupDetail", method = RequestMethod.POST)
public ResponseBody<Object> getGroupDetail(
@RequestBody final JsonData jsonData,
final HttpServletRequest request) {
final JSONObject jsonRequest = new JSONObject(jsonData.getData());
final GraphQL graphQL = this.schemaBuilder.getGraphQL();
final ExecutionInput executionInput = ExecutionInput.newExecutionInput()
.query(jsonRequest.getString("query")).build();
final ExecutionResult executionResult = graphQL.execute(executionInput);
return new ResponseBody(executionResult, Constants.SUCCESS);
}
加載架構
public class SchemaBuilder {
@Autowired
ReportGroupDataFetcher reportgroupDataFetcher;
public GraphQL getGraphQL() {
final SchemaParser schemaParser = new SchemaParser();
final SchemaGenerator schemaGenerator = new SchemaGenerator();
final File schemaFile = new File(myFileName);
final TypeDefinitionRegistry typeRegistry = schemaParser
.parse(schemaFile);
final RuntimeWiring wiring = buildRuntimeWiring();
final GraphQLSchema graphQLSchema = schemaGenerator
.makeExecutableSchema(typeRegistry, wiring);
return GraphQL.newGraphQL(graphQLSchema).build();
}
private RuntimeWiring buildRuntimeWiring() {
return RuntimeWiring.newRuntimeWiring().type("Query",
typeWiring -> typeWiring
.dataFetcher("reportgroup", this.reportgroupDataFetcher))
.build();
}
}
您還需要定義客戶組數據。 嘗試以下類似的方法。
schema {
query: Query
}
type CustomReport{
id:Int!,
name:String!
}
type Query {
reportgroup:ReportGroup
}
type ReportGroup{
name:String!,
customReport : [CustomReport]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.