복붙노트

[SPRING] Jackson을 사용하여 JSON으로 맵 변환

SPRING

Jackson을 사용하여 JSON으로 맵 변환

Jackson을 사용하여 Map을 유효한 JSON으로 변환하려면 어떻게해야합니까?

Spring Boot REST Post 메소드를 통해 Google의 GSON을 사용하고 있습니다 ...

다음은 RESTful 웹 서비스입니다.

import java.util.Map;

import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.google.gson.Gson;

@RestController
@RequestMapping("/myservice")
public class ValidationService {    

    @RequestMapping(value="/validate", method = RequestMethod.POST)
    public void validate(@RequestBody Map<String, Object> payload) throws Exception {
        Gson gson = new Gson();
        String json = gson.toJson(payload); 
        System.out.println(json);
    }
}

그래서, 다음과 같이 이것을 호출 할 때 :

curl -H "Accept: application/json" -H "Content-type: application/json" \
-X POST -d '{"name":"value"}' http://localhost:8080/myservice/validate

stdout에 다음을받습니다 (이것이 내가 원하는 것입니다) :

{"name":"value"}

Google의 Gson 대신에 Jackson을 사용하여이 작업을 수행하는 더 좋은 방법이 있습니까? 아니면 내가 잘못된 방향으로 가고 있습니까?

해결법

  1. ==============================

    1.다음과 같이 Jackson을 사용하여 Map을 JSON으로 변환 할 수 있습니다.

    다음과 같이 Jackson을 사용하여 Map을 JSON으로 변환 할 수 있습니다.

    Map<String,String> payload = new HashMap<>();
    payload.put("key1","value1");
    payload.put("key2","value2");
    
    String json = new ObjectMapper().writeValueAsString(payload);
    System.out.println(json);
    
  2. ==============================

    2.대신 Object Mapper를 선호해야합니다. 다음과 같은 링크가 있습니다 : Object Mapper - Obect에서 JSON으로가는 Spring MVC 방식

    대신 Object Mapper를 선호해야합니다. 다음과 같은 링크가 있습니다 : Object Mapper - Obect에서 JSON으로가는 Spring MVC 방식

  3. ==============================

    3.jackson을 사용하면 다음과 같이 할 수 있습니다.

    jackson을 사용하면 다음과 같이 할 수 있습니다.

        ObjectMapper mapper = new ObjectMapper();
        String clientFilterJson = "";
        try {
            clientFilterJson = mapper.writeValueAsString(filterSaveModel);
        } catch (IOException e) {
            e.printStackTrace();
        }
    
  4. ==============================

    4.jackson을 사용하는 경우 ObjectNode로 직접 변환하는 것이 좋습니다.

    jackson을 사용하는 경우 ObjectNode로 직접 변환하는 것이 좋습니다.

    //not including SerializationFeatures for brevity
    static final ObjectMapper mapper = new ObjectMapper();
    
    //pass it your payload
    public static ObjectNode convObjToONode(Object o) {
        StringWriter stringify = new StringWriter();
        ObjectNode objToONode = null;
    
        try {
            mapper.writeValue(stringify, o);
            objToONode = (ObjectNode) mapper.readTree(stringify.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        System.out.println(objToONode);
        return objToONode;
    }
    
  5. from https://stackoverflow.com/questions/29340383/convert-map-to-json-using-jackson by cc-by-sa and MIT license