1

JSON APIを介してユーザープロジェクトを管理したいのですが、相対パスコントローラーを使用したいと思います。このような:

@RequestMapping(value="/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​​を返すカスタムアノテーションを作成したいと思います。

私はそれを行うためにこのチュートリアルを見つけました。これは本当に説明されているほど複雑ですか?他の解決策を知っていますか?(2つのクラスと50行を超えるコードを記述して、4行に注釈を付けることは避けたいと思います。)

ありがとうございました。

4

1 に答える 1

3

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

WebArgumentResolverはあなたのニーズに合わないと思います。404ステータスを返すことは複雑かもしれません。

たぶん、カスタムインターセプターがより良い解決策になる可能性があります。これは、コントローラーへのすべての要求で呼び出されます。そこで、ハンドラーオブジェクトを調べて、たとえば@PathVariableで注釈が付けられたuserIdというパラメーターがあるかどうかを確認できます。次に、チェックを実行し、必要に応じて応答オブジェクトを使用して404を返すことができます。

別のオプションはカスタム@Aspectを作成することですが、問題を複雑にしすぎている可能性があります。したがって、最初に、前の解決策を試してください。

于 2012-03-06T11:17:26.000 に答える