묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
argument resolver로 지정해둔 타입외가 무슨 말인가요?
@ModelAttribute나 @RequestParam둘다 생략 가능한데@RequestParam이 단순타입을 처리한다면나머지는 @ModelAttribute라는데,여기서 '예외사항이 argument resolver로 지정해둔 타입외'라는게 무슨말인가요..?애초에 argument resolver는 핸들러의 모든 argument들을 처리하는하는애가 아닌가요..? 그럼 여기에 단순 타입이든 뭐든 이놈이 처리해줄텐데, argument resolver로 지정해둔 타입외라는건 무슨말인지 이해가 되지 않습니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Query Parameter 방식에서의 ArgumentResolver 동작 원리에 대해
localhost.com:8080/hello?username=kim&age=20위와 같은 get 방식의 요청이 들어왔을 때,@GetMapping("/hello") public void foo(HelloData helloData) { }제가 이해한 내용을 바탕으로 설명해보겠습니다.컨트롤러에게 HelloData 객체를 만들어 전달해주는 것은 ArgumentResolver 입니다. 만일 HTTP 메시지를 통해 username과 age가 전달되었다면, HelloData 객체를 만들기 위해 HTTP 메시지 컨버터를 사용하였을 것입니다.마찬가지로 Query Parameter 방식으로 값이 전달되었을 때, HelloData 객체를 만드는 주체도 ArgumentResolver 인가요? 이 때는 HTTP 메시지 컨버터를 이용하는 것이 아니라 프로퍼티(constructor, setter)를 찾고, 그것으로 객체를 만드는 것인가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
DTO 작성에 관련 질문
강좌 재미있게 듣고 있습니다. 강의를 듣던 중 질문이 생겨서 이렇게 질문글 남깁니다. mvc2강좌를 듣던중 HttpMessageConverter와 관련하여 학습하고, DTO를 활용해서 비지니스 로직 레이어까지 전달한다는 내용은 이해했습니다. 제가 한번 테스트 하던 중 아래와 같은 경우에는 어떻게 실무에서 해결하는지 궁금해서 질문남깁니다. <상황제시> * json 형식이 아래와 같이 2가지 케이스로 나뉜다 ```json { "id":"hello-id", "data": "hello-data" } ``` ```json { "id":"hello-id", "data": { "key": "value" } } ``` 요약하자면 data에 대응하는 value가 string 또는 객체로 들어갈 수 있는 상황입니다. 이런 상황에서 ```java class Dto { @Datapublic class Dto { private String id; private Object data;} } ``` 와 같이 활용하면 잘 안 되더라구요.. HttpMessageNotReadableException 라는 예외가 발생하는 것을 확인했습니다. 동일한 url 에 GetMapping 에서 활용하고자 하는데, 이런 경우에는 현업에서 어떻게 활용하나요? DTO를 상속하는 형태로 추상클래스생성 및 확장하는 형태로 진행하나요? 궁금합니다!
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HomeConroller의 핸들러 메소드에서 로그인 정보를 담는 member 객체에 대한 질문입니다.
안녕하세요, 로그인 처리2 - 필터, 인터셉터 파트의 'ArgumentResolver' 활용편에서 궁금한 사항이 있어 질문 글을 작성해 봅니다. HomeController에서 '/' URL에 대한 핸들러 메소드 선언시 'member' 파라미터에 대해서는 @Login 어노테이션을 선언하여 직접 구현한 LoginMemberArgumentResolver를 통해 세션에 담긴 로그인 객체를 바인딩(?) 시켜주는 과정을 확인할 수 있었습니다. 만약, HomeController에서 '/' URL 요청 매핑 외 다른 URL 요청 매핑을 처리할 수 있는 여러 핸들러 메소드가 선언되고, 기획자 또는 클라이언트의 요구사항에 따라 HomeController에서 처리되는 모든 핸들러 메소드에 대해서는 로그인 객체를 이용하여 무언가 분기 처리를 해야하는 로직이 포함되어 있어야 한다면(분기 처리는 각기 다른 로직을 포함하고 있습니다.) HomeController에 존재하는 모든 핸들러 메소드의 파라미터로 '@Login Member member'가 선언이 되어야 할 것 같다라는 생각이 들었습니다. 이 또한 반복적인 코드가 아닐까 싶은데요. HomeController에서 '전역적'으로 로그인 정보를 포함하고 있는 객체를 선언하고, 이를 핸들러 파라미터로 굳이 선언하지 않아도, 각 핸들러 메소드에서 사용할 수 있는 방법이 있을까요? P.S HTTP 요청 -> WAS -> 필터 -> 서블릿(디스패처 서블릿) -> 스프링 인터셉터 -> 컨트롤러 흐름을 생각해 보면... 서블릿 필터 또는 인터셉터를 통해 매 요청에 세션에 담긴 로그인 정보를 핸들러 메소드에 각각 다시 주입(?) 시켜줘야 할 것 같은데 실무에서 보통 이렇게 처리하는지 아니면 다른 방법이 있는지 궁금합니다. 미리 답변 감사드립니다.