2つ以下と、いつ使用するの違いは何ですか?
@GetMapping(path = "/usr/{userId}")
public String findDBUserGetMapping(@PathVariable("userId") String userId) {
return "Test User";
}
@RequestMapping(value = "/usr/{userId}", method = RequestMethod.GET)
public String findDBUserReqMapping(@PathVariable("userId") String userId) {
return "Test User";
}
コメント(および ドキュメント )で述べたように、value
はpath
のエイリアスです。 Springでは、よく使用される要素のエイリアスとしてvalue
要素を宣言することがよくあります。 _@RequestMapping
_(および_@GetMapping
_、...)の場合、これはpath
プロパティです。
これは
path()
のエイリアスです。たとえば、@RequestMapping("/foo")
は@RequestMapping(path="/foo")
と同等です。
この背後にある理由は、注釈に関してはvalue
要素がデフォルトであるため、より簡潔な方法でコードを書くことができるからです。
この他の例は次のとおりです。
@RequestParam
_(value
→name
)@PathVariable
_(value
→name
)ただし、例で示したように、_@GetMapping
_は_@RequestMapping(method = RequestMethod.GET
_)のエイリアスであるため、エイリアスは注釈要素のみに限定されません。
コード内でのAliasFor
の参照 を探すだけで、かなり頻繁にこれを行うことがわかります。
_@GetMapping
_は@RequestMapping(method = RequestMethod.GET)
の省略形です。
あなたの場合。 @GetMapping(path = "/usr/{userId}")
は@RequestMapping(value = "/usr/{userId}", method = RequestMethod.GET)
の短縮形です。
両方とも同等です。より冗長な選択肢よりも、_@GetMapping
_の省略形を使用することをお勧めします。 _@RequestMapping
_でできないことの1つは、_@GetMapping
_ではできませんが、複数の要求メソッドを提供することです。
_@RequestMapping(value = "/path", method = {RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT)
public void handleRequet() {
}
_
複数のHttp動詞を提供する必要がある場合は、_@RequestMapping
_を使用します。
_@RequestMapping
_のもう1つの使用法は、コントローラーのトップレベルパスを提供する必要がある場合です。例えば.
_@RestController
@RequestMapping("/users")
public class UserController {
@PostMapping
public void createUser(Request request) {
// POST /users
// create a user
}
@GetMapping
public Users getUsers(Request request) {
// GET /users
// get users
}
@GetMapping("/{id}")
public Users getUserById(@PathVariable long id) {
// GET /users/1
// get user by id
}
}
_
@ GetMapping は@RequestMappingのエイリアスです
@GetMappingは、@ RequestMapping(method = RequestMethod.GET)のショートカットとして機能する合成注釈です。
値 methodは、pathメソッドのエイリアスです。
これはpath()のエイリアスです。たとえば、@ RequestMapping( "/ foo")は@RequestMapping(path = "/ foo")と同等です。
そのため、両方の方法はその意味で似ています。