2013-05-03 5 views
0

내 컨트롤러와 모델 클래스는 다음과 같이 : 는 스프링 MVC에서 JSON을 게시하는 방법

@Controller 
@RequestMapping("/apkinfo") 
public class ApkInfoController { 


    public @ResponseBody String registerApk(@RequestBody ApkInfoReq req){ 
     //Do something 
    } 
} 

public class ApkInfo implements Serializable { 

    private String deviceId; 
    private List<ApkInfo> apkinfo; 

    //gettters and setters 
} 

public class ApkInfo implements Serializable { 

    private String appName; 
    private String packageName; 
    private String version; 
    private Date installDate; 
} 

가 그럼 난 jQuery를 Ajax를 사용하여 서버에 데이터를 게시하기 위해 노력했다.

var param = { 
    deviceId: '1234', 
    apkinfo: [ 
     {appName:'a', packageName:'a.a', version: '1', installDate:"2013-05-03 10:00:00"}, 
     {appName:'b', packageName:'a.b', version: '2', installDate:"2013-05-03 10:00:00"} 
    ] 
} 

$.ajax({ 
    type: 'POST', 
    url : 'to_my_server_url', 
    contentType: 'application/json', 
    dataType: 'json', 
    data: param, 
    error: function(){}, 
    success: function(data){ 
     //do something 
    } 
}) 

그러나 '지원되지 않는 미디어 유형'오류가 발생합니다. 내 applicationContext.xml의 Jackson Mapping 설정과 다른 mothod의 @ResponseBody가 잘 작동합니다.

applicationContext.xml

<context:component-scan base-package: "xx.xx.xxxxx.xx"; 
<contex:annotation-config /> 
<mvc:annotation-driven /> 

<bean id="jacksonMappingConverter" class="org.springframework.htttp.converter.json.MappingJacksonHttpMessageConverter"> 

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

은 어떻게 JOSN 데이터를 게시 할 수 있습니까? 감사.

편집 :

요청을 보내기 전에 내가 JSON 객체로 변환 :

$ 아약스 ({ ... 데이터 : JSON.stringify (PARAM) ... });

그리고 pom.xml에는 Jackson 라이브러리가 있고 @ResponseBody에는 문제가 없습니다.

installDate 필드를 놓쳤습니다.

+0

지금 문제가 해결되었습니다. 문제는 ApkInfoReq 클래스에서 apkinfo 필드 alpahbet 경우입니다. 필드에 대한 setter public void setApkInfo (List apkInfo) 그래서 Jackson mapper가 apkInfo를 키 이름으로 사용하려했지만 내 필드는 'apkinfo'였습니다. 모두 소문자였습니다. 나는 그 사건을 바꾸었고 이제는 효과가있다. 어쨌든 고마워. – sunghun

답변

0

classpath 안에 jackson jar가 있습니까? 또한 @RequestMapping 추가 할 수 있습니다 jQuery docs에서이 메가 샘플 MappingController

+0

나는 그렇게 생각한다. org.codehau.jackson 잭슨 - 매퍼 - ASL 지점에 대한 1.9.12 sunghun

0
var param = { deviceId: '1234', ... 
$.ajax({ ... data: param, ... 

를 참조하여 방법 핸들러 (값 = "/ 매핑", MediaType.APPLICATION_JSON_VALUE = 소비) : "데이터를 ... 그것은 변환된다 당신은 당신이 서버에 JSON를 전송하지 않는 다음 코드에서 다른 곳 JSON 문자열로 param을 변환하지 않는 경우. 쿼리 문자열, 그렇지 않은 경우 이미 문자열로. 그래서

당신은 그

로 할 수있는
data: JSON.stringify(param) 
+0

감사 : 내 pom.xml 파일에서. contentType : applicatoin/json을 설정하면 다음과 같이 JSON 처리 방식으로 요청을받을 수 있습니다. $.AJAX ({ URL 'my_url' 의 contentType : "애플리케이션/JSON ' 데이터 {PARAM {의 DeviceID :'1234 'apkinfo [{}, {}]}}} ); 공공 @ResponseBody 문자열 registerApk (@RequestBody 문자열 PARAM)는 { // 뭔가 를 수행}하지만 ApkInfoReq 개체로 JSON 변환 할 수 없습니다. 어쨌든, 당신이 말한대로 그것을 시도 할 것입니다. – sunghun

+0

당신이 말한대로 시도했지만 여전히 같은 오류가 있습니다. – sunghun

+0

컨트롤러 클래스에 누락 된 클래스의 installDate 필드와 headers = "Content-Type = application/json"을 추가했습니다. 이제 '잘못된 요청'오류가 발생합니다. – sunghun

관련 문제