오늘은 뭐 앞뒤가 이어지는 형식은 아니고
강의를 많이 듣다보니 중간중간 알아둘 키워드가 있는 것 같아서 정리하려고 한다.
사실 집중이 안돼서 전부 필기로 노트에 작성했는데 이러면 모아보기 힘들니깐 여기다가 옮겨적기....겸 복습
Controller Annotation에는 두가지 종류가 있다.
Controller 어노테이션은 Spring에서 Handler(=Controller)를 만들 때 사용된다.
얘는 반환할 때 view(HTML)가 있음
@Controller
public class ViewController {
@RequestMapping("/view")
public String example() {
return "index";
}
}
여기서 리턴을 index로 했는데 이럼 index.html이나 index.jsp같은 view가 있으면 그 페이지를 반환한다.
📌
Templete Engine(Thymeleaf, JSP)을 사용하는 경우에 해당 어노테이션이 쓰인다.Thymeleaf 사용시
SpringBoot build.gradle에 의존성 추가해줘야 한다.
implementation 'org.springframework.boot::spring-boot-starter-thymeleaf'
rm
얘는 데이터를 반환한다. 뭐.... Json/XML이런거
Restful API 를 위해서 오가는 데이터가 자신을 설명할 수 있어야 하기 때문..........?@RestController
public class ResponseController {
@RequestMapping("/string")
public String example() {
// logic
return "sparta"; // ViewName이 return 되는게 아니라, String Data가 반환된다.
}
}
이렇게 Controller(=Handler)가 뱉는 리턴값이 view가 아니라 데이터가 되면,
기존에 알고 있던 SpringMVC의 특정 단계가 없어짐

원래는 8. Mdoel And View 반환-> 알맞은 응답으로 조립 단계가 8.Date를 응답으로 바뀌어버림
이 이유는 아래에 설명하는 @Responsebody와 관련이 있다.
클래스, 함수 앞에 붙는 어노테이션으로
+ 나중에 나오는 @PathVariable도 요거 쓸 때 쓰인다.해당 RequestMapping이 존쟁하는 클래스에 속한 메서드들은
RequestMapping 안의 경로에서 접근 가능하다.
기본
@RequestMapping(value = "/v1", method = RequestMethod.GET)
method = RequestMethod.GET이외에도 POST/DELETE/PUT/PATCH등 필요한 메소드 사용 가능함.
@PostMapping@PutMapping@DeleteMapping@PatchMapping@GetMappingRequest자리에 필요한 HTTP 메서드 집어넣으면댐어....이건 노트그냥 붙이는게 낫겠다

HTTP 요청할 때 URI에 데이터를 싣는 방법
{} 중괄호로 표현한다.
@RequestMapping(value = "/post/{postId}")
이런식으로 사용하고 {posId}의 postId는 이제 uri에서 집어늫는 값에 따라 바뀌게 된다.
1️⃣ public String 함수이름(@PathVariable("postId") Long data)
{postId} 값을 data로 이름 바꿔서 받아오겠다.2️⃣public String 함수이름(@PathVariable Long postId)
@PathVariable 사용 시 주의 사항✔️ 기본적으로 @PathVariable로 설정된 경로 변수는 반드시 값을 가져야 하며
값이 없으면 응답 상태코드 404 Not Found Error가 발생
✔️ @PathVariable 다중 사용 가능
@GetMapping("/{postId}/comments/{commentId}") 이런식으로 사용가능

http://localhost:8080/경로/...?key=value인 url로 접근 가넝
강의에서는 header에 들어가는 파라미터 종류를 꼽아줬고, postman에서 header안에 들어가는 값들을 확인할 수 있다.

headers같은 파라미터의 경우 뒤 스트링에서 key=value형태로 지정가능
comsumes는 헤더의 Content-Type을 지정하는 것이고
produces는 Accept 값을 고칠 수 있음.


http://localhost:8080/request-params?key1=value1&key2=value2

key, value를 작성할 수 있음<Form> 태그쓸 때 이런식으로 들어가니깐 그거 상상하면서 매칭하면 될듯.얘는 다른 두개랑 다르게 받아오는 형태를 java의 클래스로 지정해두는거임
그 클래스는 앞에 @Data를 달고있어서 자동 Getter, Setter @EqualsAndHashCode, @RequiredArgsConstructor등 기본적으로 필요한 함수 만들어주고
@_Mapping어노테이션이 사용된 함수의 파라미터로 해당 클래스가 들어오면
자동으로 객체 만들어줌
⚠️@Data 는 테스트 용도로만 사용하고 실무에서는 잘 사용하지 않는다.

참고로 포스트맨에서 데이터 입력할 떄는

( x-www-form-urlencoded ) 활용해준다.
@RestController에서 사용하며, 대부분 JSON 형식으로 데이터를 전달한다.✅ JSON을 Java 객체로 변환하려면 Jackson과 같은 라이브러리를 사용해야 한다.
Spring Boot는 기본적으로 Jackson 라이브러리의 ObjectMapper를 제공하며, starter-web에 포함되어 있다.따라서, Spring Boot는 JSON을 Java 객체변환을 기본으로 제공해줌

HttpMessageConverter는 Spring Framework에서 HTTP 요청과 응답을 변환하는 인터페이스이다.
클라이언트와 서버 간에 데이터를 주고받을 때,
1️⃣ 요청 데이터를 자바 객체로 변환하거나
2️⃣ 자바 객체를 응답 본문으로 변환하는 역할을 수행한다.
request, reesponse 메시지를 개봉/포장 하는 역할이라는 뜻

아래는 사용방법...
위에서 거의 지금까지 썻던 기본형태

Request,Response객체를 각각만들고 스트림을 통해서 값을 받아와서 writer를 통해 응답한다.
위에서 썼던 Request,Response객체를 째로 들고오지 않고 필요한 스트림과 Writer를 파라미터에서 바로 받아옴

throws IOException이 있는 이유HttpEntity는 HTTP Header, Body 정보를 편리하게 조회할 수 있도록 만들어준다.
HttpEntity 역할
1. Http Request Body Message를 직접 조회한다
2. Request 뿐만 아니라 Response도 사용할 수 있도록 만들어준다.
3. Response Header 또한 사용할 수 있다.
4. Request Parameter를 조회하는 기능들과는 아무 관계가 없다.
5. View를 반환하지 않는다. (@RestController 라는 소리겠찌?)
6. ‼️HttpMessageConverter을 사용한다

하지만 Data를 httpEntity에서 꺼내어 사용해야 한다는 불편함이 있음
RequestEntity<>ResponseEntity<> HttpEntity 에 대한 설명은 다음시간에 계속 . . ..