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