/**
* 역할 목록 조회
* @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;
}
}
}
정도만 기억해두려 한다.
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) 정도 괜찮다.
내가 받은 string이 json 객체 형식의 json String이라는 것이 확실하면 JSONObject로 형변환해서 .get()해서 쓸 수도 있음