前提・実現したいこと
https://ti-tomo-knowledge.hatenablog.com/entry/2018/06/18/094526
このサイトを参考にメールの二重登録を防ぐバリデーションを作成しようと思っています。
発生している問題・エラーメッセージ
JSON形式でPOSTした値をヴァリデーションにかけたいのですが以下のエラーが発生します。
エラーメッセージ "HV000028: Unexpected exception during isValid call. [2m:[0;39m Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is javax.validation.ValidationException: HV000028: Unexpected exception during isValid call.] with root cause java.lang.NullPointerException: null ### 該当のソースコード
java
1Account.class 2 3@Table(name="test_valid") 4@Entity 5@Data 6public class Account { 7 8 @Id 9 @GeneratedValue(strategy=GenerationType.IDENTITY) 10 private int id; 11 12 @NotNull 13 @Email 14 @Unused 15 private String email; 16 //Getter/Setter省略 17}
java
1AccountRepository.class 2 3@Repository 4public interface AccountRepository extends JpaRepository<Account, Integer> { 5 6 public Account findByEmail(String email) ; 7}
java
1Account 2 3@Service 4public class AccountService { 5 6 @Autowired 7 AccountRepository accountRepository; 8 9 public Account findByEmail(String email) { 10 return accountRepository.findByEmail(email); 11 } 12 13 public Account save(Account account) { 14 return accountRepository.save(account); 15 } 16}
java
1@RestController 2public class Controller { 3 4 @Autowired 5 private AccountService accountService; 6 7 @PostMapping("/test/validation") 8 public Account save(@RequestBody Account account) { 9 return accountService.save(account); 10 } 11 12 @GetMapping("test/email/{email}") 13 public Account findByEmail(@PathVariable("email") String email) { 14 return accountService.findByEmail(email); 15 } 16}
試したこと
バリデーションに関してはサイトをまるまるコピペして、アカウントクラス、アカウントレポジトリクラス、アカウントサービスクラス、コントローラークラスは自分で作成しました。
ポストマンを使ってJSON形式で{"email":"aaa@com"}のように送信しています。
コンソールを見るとUnusedValidator.classでAccount account = accountService.findByEmail(value); のところで
NullPointerExceptionが発生しているようです。
別クラスで、accountService.findByEmail()を動かすとちゃんとAccount型が返ってきますし、valueのところにもしっかり送信したaaa@comが格納されています。
なぜUnusedValidatorで動かしたときだけこうなるのかわかりませ
----------------------------------追記-----------------------------------
バリデータークラスでサービスを@Autowiredした際にサービスがnullとなっているようです。
なぜでしょうか?
補足情報(FW/ツールのバージョンなど)
STS4.4.5.1
あなたの回答
tips
プレビュー