【发布时间】:2019-02-27 05:00:39
【问题描述】:
我有一个使用在 JQuery 中实现的 AJAX 调用从客户端调用的 Micronaut 服务。 Micronaut 服务如下图所示:
@Controller("/ajaxcaller")
public class AjaxService
{
@Get("/printit")
@Produces(MediaType.TEXT_PLAIN)
public String updateData(Session theSess)
{
System.out.println("Accessing from AJAX.");
return("Successful!");
}
}
调用 micronaut 服务的 Javascript 如下:
$.ajax({
url : '/ajaxcaller/printit',
type: "GET",
contentType: 'application/text',
success: function(data, textStatus, jqXHR)
{
alert("Get successful! "+data);
},
error: function (jqXHR, textStatus, errorThrown)
{
alert("Get failed! Error: "+jqXHR.status+", "+errorThrown);
}
});
不幸的是,尽管我告诉服务器和客户端处理纯文本,但 AJAX 调用失败并显示以下消息:
Get failed! Error: 415, Unsupported Media Type
我是否在 Micronaut 的控制器处理程序中发现了错误,或者我的客户端或服务器代码中是否缺少某些内容?有什么方法可以让这个 AJAX 调用工作吗?
更新:根据 James 在下面的答案 1 中提供的建议,对代码进行了以下更改,如下所示:
@Controller("/ajaxcaller")
public class AjaxService
{
@Get("/printit")
@Consumes("application/text")
public String updateData(Session theSess)
{
System.out.println("Accessing from AJAX.");
return("Successful!");
}
}
当我尝试使用该服务时,我仍然收到 415 失败消息。
因为我之前在 Micronaut 中创建并成功使用了其他 Get 服务,所以我使用不同的页面对此进行了测试。基本上,我没有使用 ajax 调用来调用服务,而是在 HTML 文件中使用了以下行:
window.location.href = '/ajaxcaller/printit';
调用它会生成一个显示服务返回的字符串的新页面(当然,这是预期的行为)。不会产生 415 错误——即使我删除了 @Consumes 注释。
显然,Micronaut 服务处理 AJAX 调用的方式与常规页面调用不同。我是否缺少 AJAX 端的设置,或者 Micronaut 中是否存在阻止成功 AJAX 调用的错误?
【问题讨论】:
-
看来您没有在 Ajax 中传递任何数据??在这种情况下,它肯定会抛出该错误,因为没有数据。