Skip to content

[Round7] 김문진 - Controller 확장 3#131

Open
moonjin-kim wants to merge 5 commits into
Loopers-play-dev-lab:moonjin-kimfrom
moonjin-kim:round7
Open

[Round7] 김문진 - Controller 확장 3#131
moonjin-kim wants to merge 5 commits into
Loopers-play-dev-lab:moonjin-kimfrom
moonjin-kim:round7

Conversation

@moonjin-kim

@moonjin-kim moonjin-kim commented Jun 3, 2026

Copy link
Copy Markdown
Collaborator

구현내용

RestContorller 어노테이션을 추가하여 json 응답을 추가하였습니다.
Controller param에 객체를 추가하여 body의 데이터를 역직렬화하여 받도록 개선하였습니다

Summary

Restontroller

HandlerMethod에서 메서드의 bean의 annotation을 확인하여 RestController 어노테이션이면 Json데이터를 랜더링 하였습니다.
또한 null을 반환하여 ViewResolve를 실행하지 않도록 하였습니다.
고민) json으로 화면에 출력하는 것 조차도 View로 생각하고 반환을 해야할까요?

if (bean.getClass().isAnnotationPresent(RestController.class)) {
    renderJson(res, view);

    return null;
}

Request Body 역직렬화

기존 cotroller에 req,res의 하위호환을 유지하면서 body의 데이터를 메서드에 맞는 객체로 주입하였습니다.
단 RequestBody 파라미터가 2개 이상이 되면 역직렬화의 문제가 발생할 수 있다 판단하여 1개로 제한하였습니다.

final Object[] parameters = Arrays.stream(method.getParameterTypes())
                    .map(parameterType -> {
                        if (ServletRequest.class.isAssignableFrom(parameterType)) return req;
                        else if (ServletResponse.class.isAssignableFrom(parameterType)) return res;
                        else
                            bodyParamCount.getAndIncrement();
                            return deserializedBody(parameterType, body);
                    }).toArray();

if(bodyParamCount.get() > 1) {
    throw new RuntimeException("controller에 사용 가능한 body parameter은 1개 입니다.");
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant