json 문자열 형변환은 ObjectMapper를 쓰자고

jinvicky·2024년 6월 5일
0

Spring & Java

목록 보기
20/23

/**
* 역할 목록 조회
* @param pbclnCo
* @return
*/
public List<RoleIcsVO> selectIcsRoleList(String pbclnCo) {
	String jsonData = icsFeignApi.selectRoles(pbclnCo);
    Map<String, Object> resultMap = JSONUtil.toMap(jsonData);
    ObjectMapper objectMapper = new ObjectMapper();
    return objectMapper.convertValue(resultMap.get("roles"), new TypeReference<List<RoleIcsVO>>() {});
}

폐기된 기능이라서 플젝상에는 존재하지 않는다.
resultMap.get("roles")로 역할들 리스트를 json 문자열로 받았는데 이것을 List<RoleIcsVO>로 변환하는 것이다.

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class JsonUtils {

    private static final ObjectMapper mapper = new ObjectMapper();
    private static final Logger log = LoggerFactory.getLogger(JsonUtils.class);

    public static <T> Map<String, T> toMap(String str) {
        try {
            return (Map<String, T>) mapper.readValue(str.getBytes(), Map.class);
        } catch (IOException e) {
            log.error("Error parsing JSON string to Map", e);
            return null;
        }
    }
}
  • private final ObjectMapper를 쓰는 구나~
  • readValue를 쓰는구나~
  • 문자열 바이트를 얻어서 형변환 하고픈 클래스 타입을 두번째로 넣는구나~

정도만 기억해두려 한다.

ObjectMapper.convertValue도 유용하고,
무엇보다 프로젝트 하다보면 호환성이나 버전 이런 것들이 걸리는데 내가 보기에 얘는 좀 그런 이슈가 적고 편했다.
(아닐 수 있다)


나는 ObjectMapper.readValue()에서 사용된 try-catch가 전부 Exception 레벨에서 잡는 바람에(타 회사가) 그걸 꽤나 많이 수정해야 했다.

try-catch를 쓸 때 그냥 무지성 Exception을 쓰면 다 고스란히 돌려받는다. 내가 짠 코드 아니어도 내가 고쳐야 한다.

SW 보안 진단에서 어차피 걸릴거 사전에 잘하자....
요즘은 세상이 좋아서 인텔리제이를 쓰면 다 세부 Exception 종류가 hover시 나타난다.

CWE-754
비정상적이거나 예외적 인 조건에 대한 부적절한 검사

이 케이스에서 걸렸는데

Exception말고 JsonProcessingException 식으로 구체적으로 쓰란 의미이다.

예외 후처리할 때도 e.printStackTrace()~ 이거는 쓰면 안되고, log.info(e)도 안된다.

log.error(e) 정도 괜찮다.

profile
Front-End와 Back-End 경험, 지식을 공유합니다.

1개의 댓글

comment-user-thumbnail
2024년 6월 5일

내가 받은 string이 json 객체 형식의 json String이라는 것이 확실하면 JSONObject로 형변환해서 .get()해서 쓸 수도 있음

답글 달기