【问题标题】:Spring MVC Ajax call POST not workingSpring MVC Ajax 调用 POST 不起作用
【发布时间】:2017-10-26 09:20:09
【问题描述】:

我有一个可以转换为对象的表单。我想将该对象传递到服务器上,一个 GET ajax 请求工作正常,但该对象在 java 方法中为空,然后我执行相同的请求但一个 POST 请求,它显示错误 404。不知道我做错了什么或者是什么,遵循了许多示例,但它们似乎都不起作用。

获取请求

(Ajax 调用)

$.ajax({
     type: "GET",
     url: "/pp/portal/" + businessId64 + "/saveMedicalQuestionnaire",
     contentType: 'application/json',
     dataType: 'json',
     data: { medicalHistoryDTO : medicalHistoryDTO },
     success: function(data) {
            console.log(data);
     }
});

(对象 medicalHistoryDTO)

(Java 方法)

@RequestMapping(value="/*/saveMedicalQuestionnaire", method = RequestMethod.GET)
public @ResponseBody String postEditMedical(MedicalHistoryDTO medicalHistoryDTO)
{
    System.out.println("COMMON CONTROLLER POSTEDITMEDICAL SAVE MEDICAL QUESTIONNAIRE");
    System.out.println(medicalHistoryDTO);

    return "WORKING FINE";  
}

(Eclipse 控制台)

COMMON CONTROLLER POSTEDITMEDICAL SAVE MEDICAL QUESTIONNAIRE
MedicalHistoryDTO [list=null, medicalHistorySignature=null]

(浏览器控制台)

发布请求

(Ajax 调用)

$.ajax({
     type: "POST",
     url: "/pp/portal/" + businessId64 + "/saveMedicalQuestionnaire",
     contentType: 'application/json',
     dataType: 'json',
     data: { medicalHistoryDTO : medicalHistoryDTO },
     success: function(data) {
            console.log(data);
     }
});

(Java 方法)

@RequestMapping(value="/*/saveMedicalQuestionnaire", method = RequestMethod.POST)
public @ResponseBody String postEditMedical(MedicalHistoryDTO medicalHistoryDTO)
{
    System.out.println("COMMON CONTROLLER POSTEDITMEDICAL SAVE MEDICAL QUESTIONNAIRE");
    System.out.println(medicalHistoryDTO);

    return "WORKING FINE";  
}

(浏览器控制台)

【问题讨论】:

标签: java jquery ajax jsp spring-mvc


【解决方案1】:

继续使用 POST 并接收您需要使用 @RequestBody 标记

public @ResponseBody String postEditMedical(@RequestBody MedicalHistoryDTO medicalHistoryDTO)

你可以从我的代码中看到一个工作示例https://github.com/shakeelabbas1/webservice/blob/master/src/main/java/com/service/controller/ServiceRequestController.java

更新: 我也看到data: { medicalHistoryDTO : medicalHistoryDTO } 将其替换为data: medicalHistoryDTO

【讨论】:

  • 试过了,还是错误404,我开始认为服务器配置有问题,而不是实际的ajax调用,因为错误是404“未找到”而不是403、405 , 401, 400 或任何可能表明问题所在
  • 奇怪的是,相同的 URL 对 GET 有效,但对 POST 无效。您是否尝试按照更新中的要求发送数据。同时删除 contentType, datatype
  • 你可以试试@PostMapping 而不是@RequestMapping,我遇到了这个问题,我的method = RequestMethod.POST 出于某种神秘原因没有注册。
【解决方案2】:

尝试更严格地指定路径

@RequestMapping(value="/{id}/saveMedicalQuestionnair", , method = RequestMethod.POST)
public @ResponseBody
String postEditMedical(MedicalHistoryDTO medicalHistoryDTO, @PathVariable("id") int id)

【讨论】:

  • 试图将整个路径严格指定为 businessId 作为 PathVariable 以及,仍然是错误 404。
  • 你的控制器上有这个路径 /pp/portal/ 的注释吗?
猜你喜欢
  • 1970-01-01
  • 2014-01-25
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
  • 2013-05-24
  • 1970-01-01
  • 2014-07-08
  • 2018-08-06
相关资源
最近更新 更多