1

私はJSON APIを使用してユーザープロジェクトを管理したいと思います。相対パスコントローラを使用したいと思います。このように:Springでユーザ存在チェックに注釈を付けるには?

@RequestMapping(value="https://stackoverflow.com/users/{userId}/projects", 
    headers="Accept=application/json") 
@Controller 
public class UserProjectsController { 

    @Autowired 
    private UserRepository userRepository; 

    @RequestMapping(method=RequestMethod.GET) 
    public @ResponseBody Object getAllUserProjects(@PathVariable String userId) { 
     User user = userRepository.findById(userId); 
     if (user == null) { 
      return new ResponseEntity<String>(HttpStatus.NOT_FOUND); 
     } 
     return user.getGivenProjects(); 
    } 
} 

私は多くのメソッドを追加し、ユーザーが存在するかどうかを確認する必要があります。代わりに、コードのその部分追加する:

User user = userRepository.findById(userId); 
if (user == null) { 
    return new ResponseEntity<String>(HttpStatus.NOT_FOUND); 
} 

を...すべてのメソッドの開始時に、私は、ユーザーが存在しない場合は404を返しますカスタムアノテーションを作成したいと思います。

これを行うにはthis tutorialが見つかりました。これは本当に説明されているように複雑ですか?あなたは他の解決策を知っていますか? (私は、2つのクラスと50行以上のコードを書くだけで、4行に注釈を付けることは避けたい)

ありがとう。

答えて

3

まず、このチェックはセキュリティとは関係ないと思いますか?

私はWebArgumentResolverがあなたのニーズに合わないと思います。 404ステータスを返すことは複雑な場合があります。

おそらくカスタムinterceptorがより良い解決策になります。それはあなたのコントローラーに要求されるたびに呼び出されます。ここでハンドラオブジェクトを調べて、たとえばというユーザ名というパラメータが、@PathVariableというアノテーションが付いているかどうかを調べることができます。次に、チェックを行い、必要であればレスポンスオブジェクトを使用して404を返すことができます。

もう1つのオプションはカスタム@Aspectを作成することですが、問題が複雑になっている可能性があります。最初に、以前のソリューションを試してみてください。

+0

実際、セキュリティとは関係ありません。 ありがとうございます。私は迎撃器を見るつもりです。 –

関連する問題