0

我正在尝试使用 jquery-ajax 将 POST 数据从我的 jsp 传递到我的 Spring-MVC 控制器函数。数据传递良好,当我使用 String 对象接收RequestBody时,我可以打印 JSON 数据。但是,当我使用一个 DTO 时,它的 List 变量用它自己的对象声明,控制器返回一个“ 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 传递的示例数据

[{"name":"module1","subList":[{"name":"chapter1","subList":[{"name":"subchapter1","subList":null}]}]},{ "name":"module2","subList":[{"name":"chapter1","subList":[{"name":"subchapter1","subList":null}]}]}]

4

2 回答 2

1

确保您的 AJAX 请求将请求设置Content-Typeapplication/json.

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

于 2014-01-17T15:11:16.943 回答
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 发送一个列表,现在我发送一个字符串化的文字,其中包含一个保存整个数据的变量。

它就像一个魅力!

于 2014-01-22T12:29:54.570 回答