Я реализую слой запросов в базе данных, используя GraphQl
и проект весенней загрузки для выполнения операции CRUD для базы данных sql. В схеме GraphQL я упомянул, что некоторые поля являются обязательными, и когда эти поля не упоминаются в запросе, возвращается ValidationError
сообщение об ошибке в формате по умолчанию с 200
кодом состояния.
Ошибка:
{
"data": null,
"errors": [
{
value=StringValue{value='1235'}}]}}]}' is missing required fields '[book_type]' @ 'create_book'",
"locations": [
{
"line": 3,
"column": 23,
"sourceName": null
}
],
"description": "argument 'insert' with value value=StringValue{value='1235'}}]}}]}' is missing required fields '[book_type]'",
"validationErrorType": "WrongType",
"queryPath": [
"create_book"
],
"errorType": "ValidationError",
"path": null,
"extensions": null
}
],
"dataPresent": false,
"extensions": null
}
А вот мой код с шаблоном архитектуры слоя
Контроллер:
@Autowired
private GraphQLServer graphQlServer;
@PostMapping("test")
public ResponseEntity<Object> graphQl(@RequestBody String body){
ExecutionResult response = graphQlServer.execute(body);
return ResponseEntity.ok(response);
}
Служба:
@Service
public class GraphQLServer {
@Autowired
private GraphQL graphQl;
public ExecutionResult execute(String query) {
return graphQl.execute(query);
}
}
Конфиг:
@Bean
public GraphQL loadSchema() throws IOException {
File schemaFile = schemaResource.getFile();
TypeDefinitionRegistry typeRegistry = new SchemaParser().parse(schemaFile);
RuntimeWiring wiring = buildRuntimeWiring();
GraphQLSchema schema = new SchemaGenerator().makeExecutableSchema(typeRegistry, wiring);
return GraphQL.newGraphQL(schema).build();
}
private RuntimeWiring buildRuntimeWiring() {
return RuntimeWiring.newRuntimeWiring()
.type("Mutation", mutationWiring -> mutationWiring.dataFetcher("create_book", bookDataFetcher))
.build();
}
BookDataFetcher:
@Override
public Map<String, Object> get(DataFetchingEnvironment environment) {
//return data from db by getting Map properties from environment
}
Приведенный выше код работает должным образом но мой вопрос здесь Как настроить сообщение об ошибке? В сообщении об ошибке я хотел бы упомянуть статус 400
, так как это плохой запрос от клиента