Java Tomcat下的Spring应用程序无法解析发送到服务器的json对象
我有一个应用程序,它已经正确地将json对象从服务器返回到客户端很长一段时间了,所以我知道我的json过滤器工作正常。然而,当我试图通过Extjs请求发送json对象时,我的服务器将无法接收它。以下是我在客户端的请求:Java Tomcat下的Spring应用程序无法解析发送到服务器的json对象,java,json,spring,tomcat,Java,Json,Spring,Tomcat,我有一个应用程序,它已经正确地将json对象从服务器返回到客户端很长一段时间了,所以我知道我的json过滤器工作正常。然而,当我试图通过Extjs请求发送json对象时,我的服务器将无法接收它。以下是我在客户端的请求: var pdfStore = Ext.StoreMgr.lookup('PDFStore'); pdfStore.loadData([],false); pdfStore.add(Ext.create('PeakDayNew.model.PDFModel', { wind
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对象的持有者,PDFModel对象只是列表的集合
Ext.define('PeakDayNew.model.PDFModel'{
扩展:“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;
}
公共类PdfDataList扩展了ArrayList{
私有静态最终长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.
公共类PDFModel实现可序列化{
私有静态最终长serialVersionUID=-8730795027977637977L;
私有列表daPeakAndMinForecastModelList;
私有列表和所有时间峰值列表;
等等,所有的二传手都是如此。
这个架构在我们编写的另一个应用程序中工作得很好。我正在Eclipse中使用Tomcat 7.0服务器构建这个应用程序,我猜我的Tomcat设置中缺少一些库,因为我可以发送json对象,但是Tomcat会以400个错误请求响应,即使我在帖子中检查负载,它是一个错误的请求有效的json对象
另外,如果我将控制器更改为不接受@RequestBody PdfDataList PdfDataList,而是接受@RequestBody String PdfDataList,那么我会看到json对象的文本。这以及对请求负载的检查告诉我,我的客户端正在正确构建json对象
有人知道为什么我在Tomcat下的Spring应用程序无法解析json对象吗?那么,服务器端没有错误消息?而且不可能检查服务器接收到的json是否有效?这是真的。我可以在控制器的第一行设置断点,但它永远不会到达。Tomcat错误日志没有显示任何内容,我的应用程序日志只显示了一个包含400返回代码的帖子。为了尽量减少可能出现的问题,我制作了一个简单的PDFTestModel,其中包含3个名为Test1、Test2、Test3的字符串,并在服务器端对其进行了匹配。出现了相同的400错误。我这样做只是为了验证我的json w中没有任何奇怪的错误这与我试图在服务器端接收的内容不匹配。也许你应该仔细检查你的URL,以确保它指向正确的服务器。好的,我们发现了一些问题,这很奇怪。在服务器端PDFModel中,我们删除了字段声明前的访问指示符“private”,并删除了“extends Serializable”现在我们可以接收一个空的PDFModel对象。模型的加载应该通过getter/setter方法而不是字段本身来完成,所以这很奇怪,因为它起了作用。但是,如果我将数据加载到对象中,它会再次失败。这表明客户端和服务器对象之间的数据类型不匹配。但是在PDFModel中取消私有修饰符是一种奇怪的修复方法。