Closed
Description
Hi.
I'm trying to add validation with GraphQL.
But "@validated" not working with "GraphQlController".
(I tried "GraphQlController × @Valid
" and "RestController × @Validated
" and they worked.)
Below is the source code.
If there are any missing settings, please kindly advise.
Thanks.
■Query
query ($accountCondition: AccountCondition) {
findAccountByCondition(accountCondition: $accountCondition) {
accountId
accountName
}
}
■Query variables
{
"accountCondition": {
"accountName": "test"
}
}
■schema.graphqls
input AccountCondition {
accountId: Int
accountName: String
}
type Account {
accountId: ID!
accountName: String
}
type Query {
findAccountByCondition(accountCondition: AccountCondition): [Account]
}
■AccountCondition
@Data
public class AccountCondition {
@NotNull
private Long accountId;
private String accountName;
}
■GraphQLController × @validated → Validation not works.
import org.springframework.validation.annotation.Validated;
…
@Controller
@RequiredArgsConstructor
public class GraphQlController {
private final AccountService accountService;
@QueryMapping
public List<Account> findAccountByCondition(
@Argument @Validated AccountCondition accountCondition) {
List<Account> accountList = accountService.findByCondition(
accountCondition);
return accountList;
}
}
■GraphQLController × @Valid→ Validation works.
import javax.validation.Valid;
…
@Controller
@RequiredArgsConstructor
public class GraphQlController {
private final AccountService accountService;
@QueryMapping
public List<Account> findAccountByCondition(
@Argument @Valid AccountCondition accountCondition) {
List<Account> accountList = accountService.findByCondition(
accountCondition);
return accountList;
}
}
■RestController × @validated → Validation works.
import org.springframework.validation.annotation.Validated;
…
@Controller
@RequiredArgsConstructor
public class RestController {
private final AccountService accountService;
@PostMapping("/account/search")
@ResponseBody
public Result findAccountByCondition(
@RequestBody @Validated AccountCondition accountCondition) {
List<Account> accountList = accountService.findByCondition(
accountCondition);
return ResultUtil.newSuccess(accountList);
}
}