Hy guys。
我有一些数据,由jQuery DataTable提供,我使用Ajax和数据元素发送给Spring Controller。更具体地说,ajax函数片段是:
$.ajax({
url: "../todaydatarecover.json",
type: "post",
data: dataToSend,
正如我在Stack上的另一篇文章中解释的那样,我在控制器中使用了(导致"数据")RequestBody注释:
@PostMapping(value="/todaydatarecover.json")
@ResponseBody
public ModelAndView todayInfoAndIdRecover(ModelAndView model, HttpServletRequest request,
@RequestBody TodayData todayData) throws IOException
{
并且,总是如我解释的那样,我创建了一个具有由ajax发送到控制器的变量的类;在方法标志中,您可以看到她的名字是TodayData。这是实施:
public class TodayData
{
private long dateInBox;
private String nameInBox;
private String typeInBox;
<follow setters and getters>
在网上搜索,我发现可能会请求对象映射器的显式设置;所以,我找到了我的配置(Spring Boot和Jackson Framework,两者都是上一版本)这一个:
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
jsonConverter.setObjectMapper(objectMapper);
return jsonConverter;
}
放在public class MvcConfiguration extends WebMvcConfigurerAdapter
文件中。
数据作为对象传递给Controller:
$('#eventsdatageneral').on('click', '.btn.btn-info', function(event)
{
var today_date = new Date().getTime();
var dataToSend = new Object();
dataToSend.dateInBox= today_date;
dataToSend.nameInBox = host_name;
dataToSend.typeInBox = type_name;
问题是当我点击必须启用发送的按钮时, 我收到了404错误。
对象似乎格式正确;在控制台上,我得到了这个:
参数似乎正确:
我在Java控制台上没有错误;
所以,我不明白的是,如果我错误地使用Object Mapper配置,或者取决于我在控制器或其他设备上实现的内容。
答案 0 :(得分:1)
您正在使用@RequestBody
表示您的控制器需要有效负载,因此您需要在发送之前使用JSON.stringify序列化您的JavaScript对象,否则它将以enl形式发送。
$.ajax({
url: "../todaydatarecover.json",
type: "post",
data: JSON.stringify(dataToSend),
...
});
此外,您的请求映射看起来不对。您将使用ModelAndView
返回@ResponseBody
。它们不应该一起使用,并且没有意义返回ModelAndView
到ajax请求。
我建议您从请求映射中删除扩展名(.json
)。它应该只是:
@PostMapping(value="/todaydatarecover")
答案 1 :(得分:1)
您需要对代码进行一些更改
您需要创建JSON对象,如下所示,以便将其与Java POJO类TodayData
绑定:
$('#eventsdatageneral').on('click', '.btn.btn-info', function(event)
{
var today_date = new Date().getTime();
var dataToSend = {};
dataToSend["dateInBox"] = today_date;
dataToSend["nameInBox"] = host_name;
dataToSend["typeInBox"] = type_name;
发送您的ajax请求时,您需要使用JSON.stringify函数将您的javascript对象转换为JSON。
$.ajax({
url: "../todaydatarecover.json",
type: "post",
data: JSON.stringify(dataToSend),
同样提到 alfcope ,ModelAndView
和@ResponseBody
不应该一起使用,因为当我们在方法上使用@ResponseBody
时,我们我们说我们不希望生成视图,并且该对象将作为您的响应主体的一部分返回。
检查您为此应用程序所做的配置中的url-pattern
,或更正您要发送的.json
网址。