【问题标题】:How to post JSON in Spring MVC如何在 Spring MVC 中发布 JSON
【发布时间】:2013-05-03 04:21:05
【问题描述】:

我的控制器和模型类如下所示:

@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
    } 
})

但我收到错误“Unspported MediaType”。我的 applicationContext.xml 中有 Jackson Mapping 设置,其他方法的 @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 对象:

$.ajax({ ... 数据:JSON.stringify(参数) ... });

我的 pom.xml 中有 Jackson 库,@ResponseBody 没有问题。

我错过了 installDate 字段。

【问题讨论】:

  • 我现在解决了这个问题。问题是 ApkInfoReq 类中的 apkinfo 字段 alpahbet 案例。字段 public void setApkInfo(List apkInfo) 的设置器因此,我认为 Jackson 映射器尝试使用 apkInfo 作为键名,但我的字段是“apkinfo”,全小写。我改变了案例,然后现在它可以工作了。无论如何,谢谢,伙计们。

标签: spring-mvc request


【解决方案1】:

你的类路径中有杰克逊罐子吗?您还可以在您的方法处理程序上添加 @RequestMapping(value="/mapping", consumes=MediaType.APPLICATION_JSON_VALUE) 请参阅此示例-MappingController

【讨论】:

  • 我想是的。在我的 pom.xml 中: org.codehau.jacksonjackson-mapper-asl1.9.12
【解决方案2】:
var param = { deviceId: '1234', ...
$.ajax({ ... data: param, ...

来自jQuery docs:“数据 ...如果还不是字符串,则将其转换为查询字符串

因此,如果您不在代码中的其他位置将param 转换为JSON 字符串,那么您就不会将JSON 发送到服务器。你可以这样做

data: JSON.stringify(param)

【讨论】:

  • 感谢您的意见。我设置 contentType: applicatoin/json 并且我可以像这样接收 JSON 处理请求: $.ajax({ url: 'my_url', contentType: 'application/json', data : { param : {deviceId: '1234', apkinfo:[{},{}]}}, }); public @ResponseBody String registerApk(@RequestBody String param){ //Do something } 但我无法将 JSON 转换为 ApkInfoReq 对象。不管怎样,我会按照你说的试试看。
  • 我在控制器类中添加了该类的 installDate 字段和 headers="Content-Type=application/json"。现在我收到“错误请求”错误。
  • @shungun 在您的 JavaScript 代码中,installDateString,它不是标准格式。我建议改用Date 对象。
猜你喜欢
  • 2013-01-11
  • 2014-05-17
  • 2016-11-10
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多