복붙노트

[SPRING] 봄 MVC, 단일 JSON deserialize?

SPRING

봄 MVC, 단일 JSON deserialize?

같은 요청으로 전송 된 JSON 값을 어떻게 쉽게 분리 할 수 ​​있습니까?

내가 서버에 JSON을 POST하면 다음과 같습니다.

{"first":"A","second":"B"}

컨트롤러에 다음 메소드를 구현하면 :

@RequestMapping(value = "/path", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public void handleRequest(@RequestBody String input) { 
    // ...
}

입력 매개 변수는 JSON 객체 전체 ({ "first": "A", "second": "B"})와 문자열을 구성합니다. 두 개의 값 (클라이언트가 보낼 수있는 다른 키 / 값 쌍을 무시해야 함) 만 있으면 실제로 원하는 두 개의 String (또는 특정 요청에 적합한 String과 int 중 하나)이 필요합니다.

문자열이 JSON 요청 본문 대신 요청 매개 변수로 전송 된 경우 간단합니다.

@RequestMapping(value = "/path", method = RequestMethod.POST)
public void handleRequest(@RequestParam("first") String first, 
                          @RequestParam("second") String second) { 
    // ...
}

@RequestBody 주석과 함께 사용할 수있는 간단한 bean 클래스를 생성 할 수 있다는 것을 알고 있습니다. 사용되는 경우 A와 B가 모두 포함되지만, 웹 응용 프로그램 내부에서 다른 목적을 가지므로 우회로처럼 보입니다.

종속성 : org.springframework : spring-web : 3.1.0.RELEASE org.codehaus.jackson : jackson-mapper-asl : 1.9.3

해결법

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

    1.

    public class Input {
        private String first;
        private String second;
    
        //getters/setters
    }
    

    ...그리고:

    public void handleRequest(@RequestBody Input input)
    

    이 경우에는 CLASSPATH에서 Jackson을 사용할 수 있어야합니다.

    public void handleRequest(@RequestBody Map<String, String> input)
    
  2. ==============================

    2.필자는 사용자 지정 주석과 결합 된이 작업을 수행하는 사용자 지정 WebArgumentResolver를 작성했습니다.

    필자는 사용자 지정 주석과 결합 된이 작업을 수행하는 사용자 지정 WebArgumentResolver를 작성했습니다.

    지금은 소스를 사용할 수 없지만 기본적으로 다음과 같은 방식으로 주석을 달았습니다.

    @RequestMapping(value = "/path", method = RequestMethod.POST)
    public void handleRequest(@JsonField("first") String first, @JsonField("second") String second) { 
        // ...
    }
    

    그런 다음 내 JsonFieldWebArgumentResolver가 메소드 매개 변수에 JsonField를 주석으로 추가했는지 여부를 확인하고 매개 변수에서 실제 유형을 추출하는 경우 List 과 같이 일반 매개 변수도 처리하려는 경우 명확하지 않습니다. 또는 List ), Jackson의 JsonParser를 수동으로 호출하여 올바른 유형을 만듭니다. 그것은 내가 당신에게 어떤 코드도 보여줄 수는 없지만 그것은 그것의 요지입니다.

    그러나이 솔루션은 Spring MVC 3.0을위한 것이고, 3.1을 사용한다면 커스텀 HandlerMethodArgumentResolver를 사용하는 것이 더 나을 것이라고 생각한다. 그러나 아이디어는 동일해야합니다.

  3. from https://stackoverflow.com/questions/8946098/spring-mvc-deserialize-single-json by cc-by-sa and MIT license