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

Json AJAX Spring中不支持的媒体类型错误,json,spring,jquery,spring-json,Json,Spring,Jquery,Spring Json,我试图用jQueryAjax将POST数据从jsp传递到SpringMVC控制器函数。当我使用字符串对象接收RequestBody时,数据被很好地传递,我可以打印JSON数据。但是,当我使用一个DTO时,它使用自己的对象声明了一个列表变量,控制器返回一个“415不受支持的媒体类型错误”,并使用以下语句 服务器拒绝了此请求,因为请求实体的格式不受请求方法的请求资源的支持 下面给出的是DTO类 public class anyClassDTO{ private Strin

我试图用jQueryAjax将POST数据从jsp传递到SpringMVC控制器函数。当我使用字符串对象接收RequestBody时,数据被很好地传递,我可以打印JSON数据。但是,当我使用一个DTO时,它使用自己的对象声明了一个列表变量,控制器返回一个“415不受支持的媒体类型错误”,并使用以下语句

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

下面给出的是DTO类

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

              //getters and setters here
   }
公共类anyClassDTO{
私有字符串名称;
私有列表子列表=新的ArrayList();
//这里有接球手和接球手
}
现在,这里是控制器功能

@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\"}";
}
@RequestMapping(headers={“Accept=application/json”},value=“urlFromJsp”,method=RequestMethod.POST)
公共@ResponseBody
字符串addData(HttpServletRequest请求,
@请求主体列表数据对象,
(模型)
{       
返回“{\”值\“:\”真\“}”;
}
是否不可能通过AJAX将对象列表从jsp页面接收到控制器

下面是从jsp传递的一组示例数据

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


确保AJAX请求将请求的
内容类型设置为
application/json


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

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

正如我在问题中所说,我有一个DTO如下

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

          //getters and setters here
早些时候,如果我直接从AJAX发送一个列表,那么现在我将发送一个字符串化的litteral,其中包含一个保存整个数据的变量


它就像一个符咒

这是一个奇怪的错误,我认为你的问题。如果您提供您正在使用的Spring版本,可能会有所帮助。Spring版本为3.1,Jackson Mapper库为2.3。0@SotiriosDelimanolis您能告诉我您认为我遇到了什么“那个”问题吗?在AJAX调用中,我们已经在发送之前设置了以下内容:function(xhr){xhr.setRequestHeader(“Accept”,“application/json”);xhr.setRequestHeader(“Content Type”,“application/json”);}@evyavan编辑您的帖子并添加您的AJAX。我用您的代码尝试了它,它可以工作。您不需要中间DTO。您还可以将日志程序设置为调试,以查看Spring的错误所在。
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\"}";
}