Я много искал в Google, а также в stackoverflow. Большинство примеров из весенней загрузки. Я новичок для 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 call, который возвращает группу вместе с отчетами
@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]
}
DataFetcher
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();
}
}