AJAX-Spring中不支持的媒体类型错误

时间:2014-01-17 10:25:10

标签: json spring jquery spring-json

我正在尝试使用jquery-ajax将jsp中的POST数据传递给我的Spring-MVC控制器函数。数据传递正常,当我使用String对象接收 RequestBody 时,我可以打印JSON数据。 但是当我使用具有使用自己的对象声明的List变量的DTO 时,控制器使用以下语句返回“ 415 Unsupported Media Type Error ”,

  

服务器拒绝了此请求,因为请求实体的格式不受所请求方法所请求资源的支持。

下面给出的

是DTO类

    public class anyClassDTO{
          private String name;
          private List<anyClassDTO> subList = new ArrayList<anyClassDTO>();

              //getters and setters here
   }

现在,这是控制器功能

@RequestMapping(headers ={"Accept=application/json"}, value = "urlFromJsp", method = RequestMethod.POST)
public @ResponseBody
String addData (HttpServletRequest request,
               @RequestBody List<anyClassDTO> dtoObject,    
               Model model)
{       
    return "{\"value\":\"true\"}";
}

是否无法通过AJAX从jsp页面接收对象列表到控制器?

这是从jsp传递的一组样本数据

  

[{ “名称”: “模块1”, “子列表”:[{ “名称”: “第1章”, “子列表”:[{ “名称”: “subchapter1”, “子列表”:空}]}] },{ “名称”: “模块2”, “子列表”:[{ “名称”: “第1章”, “子列表”:[{ “名称”: “subchapter1”, “子列表”:空}]}]}]

2 个答案:

答案 0 :(得分:1)

确保您的AJAX请求将请求的Content-Type设置为application/json

当您指定MappingJacksonHttpMessageConverter时,Spring通常会使用@RequestBody来转换请求正文。此HttpMessageConverter仅支持application/*+json类型的内容类型,因此您必须确保您的请求包含它。

答案 1 :(得分:0)

好吧,我们可以通过添加更多细节来使其工作。我没有接收@ResponseBody作为List对象,而是创建了另一个DTO,它保存了原始DTO的List对象。所以第二个DTO基本上是一个虚拟的,它将来自AJAX的数据作为单个对象接收。

就像我在问题中所说的,我有一个DTO如下

 public class AnyClassDTO{
      private String name;
      private List<anyClassDTO> subList = new ArrayList<anyClassDTO>();

          //getters and setters here

}

我创建了另一个DTO,其中包含上述DTO的列表

public class DummyDTO{
      private List<AnyClassDTO> dummyObj;

      //getters and setters here
}

然后在控制器中我将功能改为

@RequestMapping(headers ={"Accept=application/json"}, value = "urlFromJsp", method =  RequestMethod.POST)
public @ResponseBody
String addData (HttpServletRequest request,
           @RequestBody DummyDTO dummyDTOObj,    
           Model model)
{       
        return "{\"value\":\"true\"}";
}

如果我直接从AJAX发送一个列表,那么现在我发送一个带有变量的字符串化文本,该变量保存整个数据。

它就像一个魅力!