我尝试使用jsonp数据类型执行ajax请求,这是由于跨群集环境中的域问题导致的。如何通过JSONP请求使用@RequestBody?
我可以对没有@RequestBody参数映射的方法发出jsonp请求,但是当我尝试使用@RequestBody参数实现RequestMapping时,我得到一个415 Unsupported Media Type错误。
通常当我得到这个问题时,它是由于某些属性在json对象发布和它映射到Spring的Java对象之间没有正确映射。但我能找到的惟一差异是使用jsonp它添加了一个名为callback的parm,并且一个名称为下划线“_”
因此,我将标记@JsonIgnoreProperties(ignoreUnknown = true)添加到了我的Java对象并计算那应该可以解决这个问题,但是它仍然会抛出这个错误。
还有什么我需要做的吗?
编辑:我现在看到的调试日志输出该堆栈跟踪从春: org.springframework.web.HttpMediaTypeNotSupportedException:内容类型“应用程序/八位字节流”不支持
$.ajax({
url : 'http://blah/blah.html',
data : { abc : '123' }, (I also tried to JSON.stringify the object but no difference)
dataType : 'jsonp',
success : function(response) {
alert('ok '+JSON.stringify(response));
},
fail : function(response) {
alert('error'+JSON.stringify(response));
}
});
春天控制器是:
@RequestMapping({ "blah/blah" })
@ResponseBody
public ReturnObject getBlahBlah (@RequestBody MyObject obj) throws Exception {
}
参数目的是:
@JsonIgnoreProperties(ignoreUnknown = true)
public class MyObject {
private String abc;
// getter and setter for abc auto generated by MyEclipse
}
我有一个从未命中的控制器方法的断点。
谢谢你的澄清!我怀疑它是这样的...好的,我会相应地改变它(从未使用ModelAttribute将多个参数组合到一个对象中,但那就是我将需要的)。我唯一的担心是,由于查询字符串长度限制(255个字符?),我会遇到许多parms问题。或者我可以使用POST方法类型与jsonp? – Trant
JSONP仅GET - POST是不可能的。你可以编写一个代理控制器来完成这个任务(你的AJAX通过POST调用应用程序中的控制器,然后将请求转发给外部URI,然后将请求转发回你的应用程序)。 – nickdos