我有一个应用程序已经将json对象从服务器正确地返回到客户端很长一段时间所以我知道我的json过滤器工作正确。但是,当我尝试通过Extjs请求发送一个json对象时,我的服务器cannon接收它。这是我在客户端的请求:
var pdfStore = Ext.StoreMgr.lookup('PDFStore');
pdfStore.loadData([],false);
pdfStore.add(Ext.create('PeakDayNew.model.PDFModel', {
windSolarAllTimePeakList: Ext.pluck(WindSolarAllTimePeaksStore.data.items, 'data')
}));
var json = Ext.encode(Ext.pluck(pdfStore.data.items, 'data'));
console.log(json);
var myUrl = 'http://localhost:8080/PeakDaySvc/createpdf.json?queryDate=' +
tradeDateInputValue + "&capMarginText=" + capMarginTextValue +
"&taText=" + marketIssuesTextValue;
Ext.Ajax.request({
timeout: 240000,
url: myUrl,
jsonData: json,
scope: this,
success: function(conn, response, options, eOpts) {
myMask.hide();
alert("Success");
[and so on . . . ]
这是我的服务器端,这是一个用Java编写的Spring应用程序
@RequestMapping(value="/createpdf.json", method = RequestMethod.POST)
@ResponseBody
public PdfData getPDF(HttpServletRequest request, HttpServletResponse response,
@RequestParam String queryDate,
@RequestParam String capMarginText,
@RequestParam String taText,
@RequestBody PdfDataList pdfDataList) throws DocumentException, IOException, NamingException, ParseException{
javascript PDFStore对象只是PDFModel对象的持有者,它只是列表的集合。
Ext.define('PeakDayNew.model.PDFModel',{ extend:'Ext.data.Model',
requires: [
'Ext.data.Field'
],
fields: [
{
name: 'daPeakAndMinForecastModelList',
type: 'auto'
},
{
name: 'windSolarAllTimePeakList',
type: 'auto'
},
and so on . . .
我期望在服务器端接收的对象PdfDataList只是列表的包装。
public class PdfDataList extends ArrayList<PDFModel>{
private static final long serialVersionUID = 1L;
}
它的PDFModel匹配javascript对象中的列表集。
public class PDFModel implements Serializable{
private static final long serialVersionUID = -873079502797637977L;
private List<DAPeakAndMinForecastModel> daPeakAndMinForecastModelList;
private List<StandardModel> windSolarAllTimePeakList;
and so on with all the setter/getters.
这个架构在我们编写的另一个应用程序中完美运行。我正在使用Tomcat 7.0服务器在Eclipse中构建这个应用程序,我的猜测是我的tomcat设置中缺少一些库,因为我可以发送json对象,但是tomcat响应400 Bad Request,即使我检查了有效负载帖子它是一个有效的json对象。
此外,如果我将控制器更改为不接受@RequestBody PdfDataList pdfDataList而是接受@RequestBody String pdfDataList,那么我会看到json对象的文本。那,以及请求有效负载的检查告诉我,我的客户端正在正确构建json对象。
有没有人知道为什么Tomcat下的Spring应用程序无法解析json对象?