Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将@RequestBody与JSONP请求一起使用?_Java_Ajax_Spring Mvc_Jsonp_Spring 3 - Fatal编程技术网

Java 如何将@RequestBody与JSONP请求一起使用?

Java 如何将@RequestBody与JSONP请求一起使用?,java,ajax,spring-mvc,jsonp,spring-3,Java,Ajax,Spring Mvc,Jsonp,Spring 3,由于集群环境中的跨域问题,我尝试使用jsonp数据类型执行ajax请求 我可以向不使用@RequestBody参数映射的方法发出jsonp请求,但是当我尝试使用@RequestBody参数实现RequestMapping时,我得到了415个不受支持的媒体类型错误 通常,当我遇到这个问题时,是由于一些属性在发布的json对象和它在Spring中映射到的Java对象之间没有正确映射。但我能找到的唯一区别是,使用jsonp它添加了一个名为callback的parm和一个名为下划线“\ux”的parm

由于集群环境中的跨域问题,我尝试使用jsonp数据类型执行ajax请求

我可以向不使用@RequestBody参数映射的方法发出jsonp请求,但是当我尝试使用@RequestBody参数实现RequestMapping时,我得到了415个不受支持的媒体类型错误

通常,当我遇到这个问题时,是由于一些属性在发布的json对象和它在Spring中映射到的Java对象之间没有正确映射。但我能找到的唯一区别是,使用jsonp它添加了一个名为callback的parm和一个名为下划线“\ux”的parm

因此,我将标记@JsonIgnoreProperties(ignoreUnknown=true)添加到我的Java对象中,并认为应该解决这个问题,但它仍然抛出这个错误

还有什么我需要做的吗

编辑:我现在在Spring的调试日志输出中看到这个堆栈跟踪: 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
}

我在控制器方法上有一个从未命中的断点。

JSONP意味着jQuery将创建一个
元素,其中
src
指向您的控制器URL

正如您所看到的,这种方法不允许您在请求体中传递任何数据,所有数据都应该作为查询参数在URL中传递<代码>数据:{abc:'123'}表示将
abc=123
添加到URL

在控制器端,您需要使用
@RequestParam
(绑定单个参数)或
@modeldattribute
(将多个参数绑定到一个对象中):


谢谢你的澄清!我怀疑是这样的。。。好的,我会相应地更改它(从未使用ModelAttribute将多个PARM分组到一个对象中,但这正是我需要的)。我唯一担心的是,由于查询字符串长度限制(255个字符?),我会遇到许多PARM的问题。或者我可以将POST方法类型用于jsonp?jsonp是GET only-POST是不可能的。您可以编写一个代理控制器来实现这一点(AJAX通过POST调用应用程序中的控制器,然后POST将请求转发到外部URI,并将响应转发回应用程序)。
public ReturnObject getBlahBlah (@RequestParam("abc") int abc) throws Exception { ... }