I'm learning GraphQL in spring boot and I have created a mutation that saves used details in database. When I try to call the mutation from GraphiQL UI using following mutation query, it throws NullPointerException because the object I passed in mutation is not mapped with UserDto and I don't know why.
I have following code:
Controller
@Controller public class UserController { private UserService userService; public UserController(UserService userService) { this.userService = userService; } @QueryMapping(name = "userById") public UserDto findUserById(@Argument Long id) { return userService.findById(id); } @QueryMapping public String removeUserById(@Argument Long id) { return userService.removeById(id); } @MutationMapping(name = "save") public UserDto save(@Argument UserDto user) { return userService.save(user); } @QueryMapping(name = "users") public List<UserDto> findAll() { return userService.findAll(); } } GraphQL Schema
schema { query: Query mutation: Mutation } type Query{ users:[User] userById(id:ID):User } type Mutation{ save(userInput:UserInput):User } #input types input UserInput{ firstName:String! lastName:String! emailAddress:String! ipAddress:String! address:AddressInput! } input AddressInput{ addressLine1:String! addressLine2:String! addressLine3:String! addressLine4:String! addressLine5:String! addressPostCode:Int! } #object types type User{ firstName:String! lastName:String! emailAddress:String! ipAddress:String! address:Address! } type Address{ addressLine1:String! addressLine2:String! addressLine3:String! addressLine4:String! addressLine5:String! addressPostCode:Int! } Mutation Query
mutation Save($userDto: UserInput!) { save(userInput: $userDto) { firstName lastName emailAddress ipAddress address { addressLine1 addressLine2 addressLine3 addressLine4 addressLine5 addressPostCode } } } Variables
{ "userDto": { "ipAddress": "192.168.0.124", "firstName": "John", "lastName": "Mark", "emailAddress": "[email protected]", "address": { "addressLine1": "251 WC", "addressLine2": "UC MAIN", "addressLine3": "PB121", "addressLine4": "New York", "addressLine5": "USA", "addressPostCode": 457821 } } } Results
{ "errors": [ { "message": "INTERNAL_ERROR for b6287602-fc10-6ecf-2091-b57ceaeb9f0a", "locations": [ { "line": 2, "column": 3 } ], "path": [ "save" ], "extensions": { "classification": "INTERNAL_ERROR" } } ], "data": { "save": null } } When I run the GraphQL query, it throws NullPointerException in console.
Console Error
java.lang.NullPointerException: Cannot invoke "com.graphql.sample.dto.UserDto.getEmailAddress()" because "userDto" is null