404 没有错误 jQuery AJAX 呼叫控制器 Spring

我是新的b。 Spring. 我正在生成 JSON, 如下所示:


[
{
"customer" : "16", "project" : "19",
"phase" : "47", "approver" : "5",
"date1" : "", "date2" : "",
"date3" : "", "date4" : "",
"date5" : "", "date6" : "",
"date7" : "", "activity" : "1"
},

{
"customer" : "17", "project" : "20",
"phase" : "48", "approver" : "3",
"date1" : "", "date2" : "",
"date3" : "", "date4" : "",
"date5" : "", "date6" : "",
"date7" : "", "activity" : "1"
}
]


我通过了这一点 JSON 它的控制器 Spring:


$.ajax/{
type: 'post',
url: 'NewTimesheet',
dataType : 'json',
data: JSON.stringify/jsonObj/,

success: function/data/ {
console.log/data/;
}
}/;


我将请求与控制器进行比较,如下所示:


@RequestMapping/value="NewTimesheet", headers = { "Content-type=application/json" }/
@ResponseBody
public String addNewTimesheet/@RequestBody List<timesheet> timesheet,
HttpSession session/ {

logger.info/"timesheet list size is" + timesheet.size///;
return "success";
}



Timesheet

班级:


public class Timesheet {
private String project;
private String phase;
private String approver;
private String customer;
private String date1;
private String date2;
private String date3;
private String date4;
private String date5;
private String date6;
private String date7;
private String activity;

//Getters and setters
}


但我的请求没有结论。 我的控制台显示如下:

WARN
org.springframework.web.servlet.PageNotFound.handleNoSuchRequestHandlingMethod:142
- 找不到Servlet请求的相应处理程序:路径 '/NewTimesheet', 方法 'POST', 选项
map['[{"customer":"16","project":"19","phase":"47","approver":"5","date1":"","date2":"","date3":"","date4":"","date5":"","date6":"","date7":"","activity":"1"},{"customer":"17","project":"20","phase":"48","approver":"3","date1":"","date2":"","date3":"","date4":"","date5":"","date6":"","date7":"","activity":"1"}]'
-&gt; array['']]

如何比较我的 JSON 与控制器? 任何帮助都会非常感激!
</timesheet>
已邀请:

冰洋

赞同来自:

您需要将类作为控制器注释,添加 RequestMapping 在你的班级和方法中 HTTP, 你在你的方法中打电话。


@Controller
@RequestMapping/"/NewTimesheet"/
public class MyClassName {

@RequestMapping/value={ "", "/" }, method = RequestMethod.POST, headers = { "Content-type=application/json" }/
@ResponseBody
public String addNewTimesheet/@RequestBody List<timesheet> timesheet,HttpSession session/{
logger.info/"timesheet list size is"+timesheet.size///;
return "success";
}
}


</timesheet>

窦买办

赞同来自:

一对可能导致您出现问题的事情:

确保您拥有杰克逊的所有必要依赖项。 为了 Maven 这将是:


<dependency>
<groupid>com.fasterxml.jackson.core</groupid>
<artifactid>jackson-core</artifactid>
<version>2.2.2</version>
</dependency>
<dependency>
<groupid>com.fasterxml.jackson.core</groupid>
<artifactid>jackson-databind</artifactid>
<version>2.2.2</version>
</dependency>


你不需要涂抹你的对象 JavaScript, 这是隐含的。 您还必须调用您所呈现的变量,因为它必须匹配域对象:


$.ajax/{
method : 'post',
url : 'NewTimesheet',
dataType : 'json',
data:{ 'timesheet': jsonObj },
success : function/data/ {
console.log/data/;

}
}/;


您的控制器必须配置为明确处理 POST. 不需要在标题中安装所接收的内容类型。 此外,我相信您需要将域的对象与数组进行比较,而不是列表:


@RequestMapping/value="NewTimesheet", method = RequestMethod.POST/
public @ResponseBody String addNewTimesheet/@RequestParam/"timesheet"/ Timesheet[] timesheet,HttpSession session/{
logger.info/"timesheet list size is"+timesheet.length/;
return "success";
}


如果您使用相对最近的版本 Spring MVC, 然后处理请求和创建 JSON 不需要额外的配置。 你的申请 AJAX 表示答案 JSON, 哪一个 Spring 识别和委托杰克逊序列化输入和输出。

二哥

赞同来自:

有必要确定
method=post

. 我也加了
produces = "application/json"



@RequestMapping/value="NewTimesheet", method = RequestMethod.POST, produces = "application/json"/
@ResponseBody
public String addNewTimesheet/@RequestBody List<timesheet> timesheet,HttpSession session/{
logger.info/"timesheet list size is"+timesheet.size///;
return "success";
}


</timesheet>

君笑尘

赞同来自:

修正案 @RequestBody 在 @ModelAttribute 在控制器中列表之前。 在你的 json 放 "日程" 在每个字段之前,即 timesheet.customer,timesheet.project ... 类似的东西。 它将起作用。

郭文康

赞同来自:

在我的要求中 ajax 我加了 contentType:application/json.After, 添加了这个控制器比较了我的 ajax request.Thanks 对所有人。

要回复问题请先登录注册