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



我正试图用jquery ajax将POST数据从我的jsp传递到我的Spring MVC控制器函数。数据传递良好,当我使用String对象接收RequestBody时,我可以打印JSON数据但是,当我使用一个DTO,它有一个用自己的对象声明的List变量时,控制器返回一个">415不支持的媒体类型错误",并带有以下语句,

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

下面给出的是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传递的一组示例数据

[{"name":"module1","subList":[{

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

当您指定@RequestBody时,Spring通常使用MappingJacksonHttpMessageConverter来转换请求体。这个HttpMessageConverter只支持application/*+json类型的内容类型,所以你必须确保你的请求包含它

好吧,我们可以通过添加更多的细节使其正常工作。我没有将@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发送列表,现在我发送一个字符串化的垃圾文件,其中包含一个保存整个数据的变量。

它就像一个符咒!

最新更新