• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

JSON 객체 배열을 스프링 컨트롤러에서 받을 수 있는 가장 합리적인 방법을 알고 싶습니다!

20.07.28 23:33 작성 조회수 404

0

데이터 예시
{ 'testList' : [ { 'test01' : '000', 'test02' : '001' }, { 'test01' : '003', 'test02' : '004' } ] }

해당 데이터를 스프링 컨트롤러로 전달 시 (ajax 요청) 가장 합리적으로 받을 수 있는 방법이 궁금합니다.

1. @RequestBody 사용

- jackson 메시지 컨버터가 사용되기에 문제 없이 잘 동작하는 것 같습니다.-


2. @ModelAttriute 사용
- 스크립트 단에서 testList[0].test01 형태로 직접 리스트의 인덱스에 접근해서 넘기지 않을 경우, 컨버팅 에러 발생
- 데이터 예시의 형태를 직접 testList[0].test01 형태로 바꿔주는 작업을 스크립트 단에서 처리해야 하는게 맞을까요? 
(굉장히 비효율적이라는 생각이 듭니다.)

3.  스프링 컨버터 추가
- 직접 커스텀 컨버터 작성 후 등록


추가적으로  용어에 대한 정확한 이해가 되지 않아 질문드립니다.

컨버터를 등록한다라는 것이, 기존 HTTP 메시지 컨버터에 추가적으로 새로운 컨버터를 등록한다는 의미인가요?

그리고 핸들러 메소드가 이러한 컨버터들을 이용하여 객체 또는 필드에 매핑하는 것인가요?

정확한 개념이 잡히지 않으니, 응용하기가 조금 어렵습니다.

긴 질문 읽어주셔서 감사합니다!

답변 1

답변을 작성해보세요.

0

데이터를 어떤식으로 보내오느냐에 따라 컨트롤러에서 받는 방법이 달라지는건데, 자세한건 스프링 MVC를 학습하셔야 합니다. 댓글로 설명할 수 있는 분량이 아니라서요. 보통은 요청 본문에 JSON을 그대로 보내는데 그 경우에 1번이 가장 합리적인 선택입니다.

그리고 컨버터는 여러 경우에 사용이 되는데 1번의 경우처럼 요청 본문(전부다 문자열)을 특정 타입으로 변환할 때 사용하는건데, 그걸 HttpMessageConverter에 등록하는게 아니라 (그 자체도 하나의 컨버터에요 이름에서 알 수 있듯이)  스프링 MVC가 사용하는 FormatterRegistry라고 일종의 컨버터/포매터 집합인데 거기다가 추가하는걸 컨버터를 추가한다고 하는겁니다.

기본으로 여러 컨버터가 등록되어 있긴한데 그 기본 컨버터로 해결이 안되는 상황에서는 커스텀 컨버터를 만들어 추가해야겠죠.