오답노트

[SpringBoot] Json String to 객체에서 ResponseBody 까지 본문

Java

[SpringBoot] Json String to 객체에서 ResponseBody 까지

권멋져 2024. 5. 26. 01:58

Json String -> 객체

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.Arrays;

// 리스트로 받는 법
// resultList은 List<JSONObject> 이다
ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
List<HarmornyRoomDto> harmornyRoomDtos = Arrays.asList(mapper.readValue(resultList.toString(), HarmornyRoomDto[].class)); 
harmornyRoomListDto.setHarmornyroomList(harmornyRoomDtos);


// 객체로 받는 법
ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
HarmornyRoomDto harmornyRoomDto = mapper.readValue(resultList.toString(), HarmornyRoomDto.class);

Json Unrecognized field 해결

요즘 세상이 너무 좋아져서 방대한 양의 Json 데이터도 금방 class로 만들 수 있었다.

다만, 이걸 다시 내가 ResponseBody에 담기 위해서는 class에 데이터를 입력해야만 했다.

 

그래서 위에 ObjectMapper를 사용했는데 Unrecognized field 에러가 발생하더라.

에러를 보고 수동으로 다 맞춰줘야하는건가 싶어서 일단 Json의 모든 데이터를 멤버 변수로 만들어봐도 같은에러가 발생했는데, 구글링해보니 어노테이션으로 옵션을 넣어주면 금방 해결되더라. (Mapper 에서 configure에도 옵션을 넣어줘야한다.)

 

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import lombok.Data;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class HarmornyRoomDto {
...
}

 

ResponseBody

Json으로 응답을 주고 싶으면 ResponseBody에 응답을 주고 싶은 class를 묶어서(?) 반환해주면 된다.

다만 Controller 클래스가 @RestController를 사용하거나 @ResponseBody가 있어야한다. 해당 컨트롤러가 View를 호출하지 않는다면 @RestController만으로 충분하다.

 

import org.springframework.web.bind.annotation.RestController;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;

@RestController
public class NaverSearchController {

    @Autowired
    private NaverSearchService naverSearchService;

    @GetMapping("/search")
    public ResponseEntity<HarmornyRoomListDto> getSearchHarmonyRoom() { //@RequestParam String param
        HarmornyRoomListDto harmornyRoomListDto = naverSearchService.getHarmornyRoom();   
        return new ResponseEntity<>(harmornyRoomListDto,HttpStatus.OK);
    }
    
}

'Java' 카테고리의 다른 글

[JSP] JSP 에서 한글 깨짐  (0) 2024.05.06
[Spring JPA] Spring Data JPA  (0) 2023.07.18
[Java] Multi Thread Synchronization  (0) 2023.07.11
[Java] Thread  (0) 2023.07.11
[Java] 직렬화  (0) 2023.07.11