[Spring Boot] ServletUriComponentBuilder
7891 ワード
1つの記事では、Rest APIを実装する際に
REST APIを実装する場合、ユーザが要求を発行すると、特定の値を含むuriを渡す必要がある場合がある.
このとき使用されるのは
この例は、
しかし現在javaの
->CREATEDステータスとロケーションヘッダセットを持つ新しいビルダーを作成し、CREATEDステータスとロケーションヘッダを指定したURIに設定します.
結果画面
ヘッドに入る位置を確認できます.
ServletUriComponentBuilder
を使用する例をまとめた.REST APIを実装する場合、ユーザが要求を発行すると、特定の値を含むuriを渡す必要がある場合がある.
このとき使用されるのは
ServletUriComponentBuilder
です.ServletUriComponentBuilder
によって適切なURIを作成し、特定の値を含むURIを要求されたユーザに渡すことができる.この例は、
JpaRespository
を使用してsave()
メソッドに戻った後に追加されたユーザのIDであり、追加されたユーザ情報が正しいかどうかを確認するページに追加されるURLを作成する.しかし現在javaの
URI
とUriComponentBuilder
があり、@PostMapping("/signup")
public ResponseEntity<?> registerUser(@Valid @RequestBody SignUpRequest signUpRequest) {
//새로운 유저를 생성하는 부분
User user = new User(signUpRequest.getEmail(), signUpRequest.getPassword(), signUpRequest.getNickname(),
signUpRequest.getDomain(), signUpRequest.getIntroduce());
user.setPassword(passwordEncoder.encode(user.getPassword()));
Role userRole = roleRepository.findByName(RoleName.ROLE_USER)
.orElseThrow(() -> new AppException("User Role not set."));
user.setRoles(Collections.singleton(userRole));
//대충 여기까지 유저 생성하는 부분
User result = userRepository.save(user);
//Jpa를 이용하여 유저를 save() 하는 부분
/**
컨텍스트 상대 경로 URI를 쉽게 만들게 해주는 UriComponentsBuilder를 컨트롤러 메서드의 인자로 지정
*/
URI location = ServletUriComponentsBuilder
.fromCurrentContextPath().path("/api/users/{user_id}")
.buildAndExpand(result.getId()).toUri();
/**
UriComponentsBuilder와 User객체의 id로 리소스 URI를 만든다.
path()메서드에 있는 {user_id}는 플레이스 홀더며, buildAndExpand() 메서드에 넘겨준 값으로 치환된다.
*/
return ResponseEntity.created(location).body(new ApiResponse(true, "User registered successfully"));
/**
HTTP 응답 헤더를 설정하려면 메서드에서 User객체가 아닌 ResponseEntity객체를 반환해야한다. ResponseEntity객체에는 응답 헤더인 HttpHeaders객체, 상태 코드인 HttpStatus를 설정한다.
*/
}
注意:静的ResponseEntity.BodyBuilderのCreate(URI location)->CREATEDステータスとロケーションヘッダセットを持つ新しいビルダーを作成し、CREATEDステータスとロケーションヘッダを指定したURIに設定します.
結果画面
localhost:8080/api/users
にPOST要求を送信してユーザを作成する.ヘッドに入る位置を確認できます.
Reference
この問題について([Spring Boot] ServletUriComponentBuilder), 我々は、より多くの情報をここで見つけました https://velog.io/@modsiw/Spring-Boot-ServletUriComponentBuilderテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol