복붙노트

[SPRING] Jackson 메시지 변환기를 사용하여 JSON 응답을 만드는 Spring 3.0

SPRING

Jackson 메시지 변환기를 사용하여 JSON 응답을 만드는 Spring 3.0

내 messageconverter를 잭슨의 것으로 구성합니다.

class Foo{int x; int y}

및 컨트롤러

@ResponseBody
public Foo method(){
   return new Foo(3,4)
}

다른 구성없이 서버에서 JSON 문자열 {x : '3', y : '4'}을 반환 할 것으로 예상됩니다. 하지만 내 아약스 요청에 404 오류 응답을 받고

내가 잘못 ? 또는 serializer를 사용하여 Json 문자열을 내 응답 개체로 변환 한 다음 해당 문자열을 응답으로 반환해야합니다 (문자열 응답을 올바르게 만들 수 있음). 다른 구성을 만들어야합니까? 클래스 Foo에 대한 특수 효과 추가하기

여기 내 conf.xml입니다.

<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">

  <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
  <list>
    <ref bean="jacksonMessageConverter"/>
  </list>
</property>

해결법

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

    1.다음이 필요합니다.

    다음이 필요합니다.

    이것은 나를 위해 작동합니다.

    점에 유의하시기 바랍니다

  2. ==============================

    2.이것은 나를 위해 일했다 :

    이것은 나를 위해 일했다 :

    @RequestMapping(value = "{p_LocationId}.json", method = RequestMethod.GET)
    protected void getLocationAsJson(@PathVariable("p_LocationId") Integer p_LocationId,
         @RequestParam("cid") Integer p_CustomerId, HttpServletResponse response) {
            MappingJacksonHttpMessageConverter jsonConverter = 
                    new MappingJacksonHttpMessageConverter();
            Location requestedLocation = new Location(p_LocationId);
            MediaType jsonMimeType = MediaType.APPLICATION_JSON;
            if (jsonConverter.canWrite(requestedLocation.getClass(), jsonMimeType)) {
            try {
                jsonConverter.write(requestedLocation, jsonMimeType,
                                       new ServletServerHttpResponse(response));
                } catch (IOException m_Ioe) {
                    // TODO: announce this exception somehow
                } catch (HttpMessageNotWritableException p_Nwe) {
                    // TODO: announce this exception somehow
                }
            }
    }
    

    이 메소드는 아무 것도 반환하지 않는다는 것에주의하십시오 : MappingJacksonHttpMessageConverter # write ()는 마술을합니다.

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

    3.MessageConverter 인터페이스 http://static.springsource.org/spring/docs/3.0.x/javadoc-api/는 getSupportedMediaTypes () 메서드를 정의합니다.이 메서드는 MappingJacksonMessageCoverter가 application / json을 반환합니다.

    MessageConverter 인터페이스 http://static.springsource.org/spring/docs/3.0.x/javadoc-api/는 getSupportedMediaTypes () 메서드를 정의합니다.이 메서드는 MappingJacksonMessageCoverter가 application / json을 반환합니다.

    public MappingJacksonHttpMessageConverter() {
        super(new MediaType("application", "json", DEFAULT_CHARSET));
    }
    

    Accept : application / json 요청 헤더가 없다고 가정합니다.

  4. ==============================

    4.HTTP 404 오류는 리소스를 찾을 수 없다는 것을 의미합니다. 그 원인은 두 가지입니다.

    HTTP 404 오류는 리소스를 찾을 수 없다는 것을 의미합니다. 그 원인은 두 가지입니다.

    1을 수정하려면 올바른 요청 URL을 사용하거나 제공하는지 확인하십시오 (대소 문자를 구분하지 마십시오!). 2를 수정하려면 서버 시작 로그에서 시작 오류를 확인하고 적절히 수정하십시오.

    이것은 모두 멀리 게시 된 코드와 정보를 뛰어 넘습니다.

  5. ==============================

    5.잭슨 - 매퍼 - asl.jar뿐만 아니라 잭슨 - 코어 - asl.jar도 필요하다는 것을 알게되었습니다.

    잭슨 - 매퍼 - asl.jar뿐만 아니라 잭슨 - 코어 - asl.jar도 필요하다는 것을 알게되었습니다.

  6. ==============================

    6.이는 단지 추측이지만, 기본적으로 Jackson은 공개 필드 (공개 getter이지만 가시성에 관계없이 모든 setter)를 자동 감지합니다. 개인 필드를 원할 경우 자동 감지하도록이 기능을 버전 1.5로 구성 할 수도 있습니다 (자세한 내용은 여기 참조).

    이는 단지 추측이지만, 기본적으로 Jackson은 공개 필드 (공개 getter이지만 가시성에 관계없이 모든 setter)를 자동 감지합니다. 개인 필드를 원할 경우 자동 감지하도록이 기능을 버전 1.5로 구성 할 수도 있습니다 (자세한 내용은 여기 참조).

  7. ==============================

    7.나는 404가 당신의 HttpMessageConverter와 관련이 없다고 생각한다. 나는 404 호 문제가 있었고 이유는 과 일치하는 요청 만 DispatcherServlet (* .do에서 * .json으로 요청 매핑을 변경 함)으로 전송된다는 사실을 잊었다는 것입니다. 어쩌면이 또한 당신의 경우입니다.

    나는 404가 당신의 HttpMessageConverter와 관련이 없다고 생각한다. 나는 404 호 문제가 있었고 이유는 과 일치하는 요청 만 DispatcherServlet (* .do에서 * .json으로 요청 매핑을 변경 함)으로 전송된다는 사실을 잊었다는 것입니다. 어쩌면이 또한 당신의 경우입니다.

  8. ==============================

    8.여기에 대한 답변 외에도 ..

    여기에 대한 답변 외에도 ..

    클라이언트 측에서 jquery를 사용한다면, 저에게 도움이 될 것입니다.

    자바:

    @RequestMapping(value = "/ajax/search/sync") 
    public ModelAndView sync(@RequestBody Foo json) {
    

    Jquery (JSON.stringify 함수를 사용하려면 Douglas Crockford의 json2.js를 포함해야 함) :

    $.ajax({
        type: "post",
        url: "sync", //your valid url
        contentType: "application/json", //this is required for spring 3 - ajax to work (at least for me)
        data: JSON.stringify(jsonobject), //json object or array of json objects
        success: function(result) {
            //do nothing
        },
        error: function(){
            alert('failure');
        }
    });
    
  9. from https://stackoverflow.com/questions/2259551/spring-3-0-making-json-response-using-jackson-message-converter by cc-by-sa and MIT license