Skip to content

Support @Validated on method parameter #571

Closed
@hatotsumuri

Description

@hatotsumuri

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);
	}
}

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions