使用AJAX将json数据发送回java rest服务时发生错误415
我在我的前端有一个ajax请求,将JSON文档发送到其他服务实现。 它通过Spring进行连接,并且REST服务中的@GET请求运行良好。
问题是,每当我尝试使用@POST方法时,它总是会引发415错误。
我已经尝试操纵我如何发送回来,并根据各种指南在线发布方法中接受的变量类型,但我不确定接下来要看的内容。
我有双重检查,我确实有数据被发送到@POST方法,但我觉得它根本不解析JSON并抛出错误。
不幸的是,我不知道如何解决这个问题。
下面我已经把所有东西都弄昏了,直到一个简单的表单仍然产生了415错误。
AJAX请求:
function post_request(json_data) {
$j.ajax({
url : '../api/createDisplayGroup/postHtmlVar/' + containerID + '/' + containerType,
data: JSON.stringify(json_data),
dataType: 'json',
type : 'post'
}).done(function(response) {
run_update(response);
}).error(function(jQXHR, textStatus, errorThrown) {
alert('error getting request');
});
};
Spring XML:
<jaxrs:server id="displayGroupService" address="/createDisplayGroup">
<jaxrs:serviceBeans>
<ref bean="peopleFilterRestService" />
</jaxrs:serviceBeans>
<jaxrs:providers>
<ref bean="jacksonJsonProvider"/>
<!-- disable XHR token check - allow external sources to call the service -->
<!--ref bean="securityInterceptor" /-->
</jaxrs:providers>
</jaxrs:server>
<bean id="peopleFilterRestService" class="mil.milsuite.community.rest.PeopleFilterRestService">
<property name="peopleFilterService" ref="peopleFilterService"/>
</bean>
<bean id="peopleFilterService" class="mil.milsuite.community.members.service.PeopleFilterServiceImpl">
<property name="communityManager" ref="communityManager"/>
<property name="socialGroupManager" ref="socialGroupManagerImpl"/>
</bean>
REST实现(仅@POST):
@POST
@Path("/postHtmlVar/{containerId}/{contentType}")
@Consumes(MediaType.APPLICATION_JSON)
public List<TabDefinition> postHtml(@PathParam("containerId") String containerId, @PathParam("contentType") String contentType, List<TabDefinition> displayGroups) {
Long contId = Long.parseLong(containerId);
Long contType = Long.parseLong(contentType);
//return convertToResponse(peopleFilterService.getDisplayGroups(contId, contType));*/
return testDisplayGroup();
}
您收到的错误如下所示:
415不支持的媒体类型
请求实体具有服务器或资源不支持的媒体类型。 例如,客户端将图像上传为image / svg + xml,但服务器要求图像使用不同的格式。 (维基百科)
原因可能是$j.ajax
调用,尝试添加contentType
参数,例如:
...
$j.ajax({
url : '../api/createDisplayGroup/postHtmlVar/' + containerID + '/' + containerType,
data: JSON.stringify(json_data),
dataType: 'json',
type : 'post',
contentType: 'application/json'
...
这将匹配postHtml
方法使用的@Consumes
注释的值,请注意:
@Consumes注释用于指定资源可以从客户端接受或使用哪些MIME媒体类型的表示。 (Oracle)的
默认情况下, ajax
调用的媒体类型将为application/x-www-form-urlencoded
,因此您的处理程序方法将不匹配,导致415
错误。
除此之外:在ajax调用中, contentType
指定要发送到服务器的dataType
的类型,而dataType
指定将返回的数据的类型。
上一篇: 415 error when sending json data back to java rest service using AJAX