Developer/Posting
Java Spring: from String to HashMap with toUpperCase()
codingzipsa
2022. 9. 11. 18:55
반응형
요즘 한창하고 있는 DB 마이그레이션 작업 중 일부를 발췌했다.
타 DB로 이관을 위해 작업을 하는데 컬럼 타입이 달라 1차적으로 단순하게 Json Field에 저장되어 있는 Key, Value 형태의 내용을 String 형태로 빼내왔고 이를 JackSon에서 제공하는 Object Mapper를 이용하여 HashMap형태로 저장하였다.
IDE의 도움을 받았으나 readValue() 메소드는 try, catch 블록으로 감싸져야 된다고 나와 기본적인 제공내용으로 Wrapping을 진행해놓았다. (어짜피 String값이 기존 DB에서 무조건 넘어오게 되어 있어 소스는 완벽하게 제공되기에 exception을 빡빡하게 걸 필요가 없다고 판단했다)
private HashMap<String, String> convertStringToMap(String string) {
ObjectMapper mapper = new ObjectMapper();
HashMap<String, String> result = new HashMap<>();
try {
result = mapper.readValue(name,
new TypeReference<>() {
});
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return result;
}
이렇게 순조롭게 기능을 만들어놓고 사용을 하고 있었는데 예상치 못한 요구사항이 추가가 되었다. HashMap 형태로 변환해놓은 내용 중 Key를 대문자로 변환해달라는 내용이였다.
고민을 해보다보니 어짜피 지금 HashMap으로 변환을 했으니 여기서 Key값만 찾아내어 돌면서 다시 처리를 해주면 되지 않을까라는 생각이 들었다.
private HashMap<String, String> convertStringToMap(String string) {
ObjectMapper mapper = new ObjectMapper();
HashMap<String, String> result = new HashMap<>();
try {
result = mapper.readValue(name,
new TypeReference<>() {
});
resultMap = new HashMap(result.size());
Iterator it = result.keySet().iterator();
while (it.hasNext()) {
Object key = it.next();
resultMap.put(key.toString().toUpperCase(), result.get(key));
}
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return result;
}
하지만 코드가 장황해지고 뭔가 찾다보니 위 내용은 예전 방법일 것 같다는 느낌이 들어 찾아보니 For Loop로도 똑같은 내용을 구현하는게 가능해서 아래와 같이 Iterator 부분을 대체해도 되었다.
for( String key : resultMap.keySet() ){
resultMap.put(key.toString().toUpperCase(), resultMap.get(key));
}
이후 해당 코드로 돌려보니 Key 부분만 대문자로 해서 야무지게 들어간 것을 확인하고 마무리지었다.
반응형