내 컨트롤러와 모델 클래스는 다음과 같이 : 는 스프링 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 필드를 놓쳤습니다.
지금 문제가 해결되었습니다. 문제는 ApkInfoReq 클래스에서 apkinfo 필드 alpahbet 경우입니다. 필드에 대한 setter public void setApkInfo (List apkInfo) 그래서 Jackson mapper가 apkInfo를 키 이름으로 사용하려했지만 내 필드는 'apkinfo'였습니다. 모두 소문자였습니다. 나는 그 사건을 바꾸었고 이제는 효과가있다. 어쨌든 고마워. –
sunghun