【问题标题】:ajax PUT call fails with internal server errorajax PUT 调用因内部服务器错误而失败
【发布时间】:2013-11-28 05:45:20
【问题描述】:
successs(userSurpriseResponse) { // success method of another ajax call

    var updateFeedbackSeenURL = "/" + contextName + "/service/updateseenfeedbacks/";

    var responseForSurprise = JSON.stringify(userSurpriseResponse);
    var surpriseResponse = JSON.parse(responseForSurprise);

    var feedback = surpriseResponse.feedback

    $.ajax({
        header: "Accept: application/json",
        url: updateFeedbackSeenURL,
        type: 'PUT',
        crossDomain: false,
        async: false,
        cache: false,
        contentType: "application/json",
        data:JSON.stringify(feedback),
        dataType: 'json',
        success: function() {
            alert("updated seenfedback");
        },
        error: function(xhr, ErrorText, errorThrown) {
            alert("failed inside seenfedback");
            return false;
        }
    });
}

这里,来自服务器端的userSurpriseResponse 实际上是Surprise 类的对象。 Surprise 类有一个名为feedback 的属性。实际上是ArrayList<FeedBack>。我试图将整个数组列表发送回服务器,以便根据场景进行一些处理。当我发送呼叫时,我得到一个带有 apache tomcat 的内部服务器 Errror( 500 (Internal Server Error) ,并带有以下日志

*******************************************************************************************
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.tcs.teg.msgame.core.domain.FeedBack 
    at com.tcs.teg.msgame.server.dao.FeedBackDAOImpl.updateSeenFeedbacks(FeedBackDAOImpl.java:123)
    at com.tcs.teg.msgame.server.service.SurpriseBoxServiceImpl.updateSeenFeedbacks(SurpriseBoxServiceImpl.java:129)
    at com.tcs.teg.msgame.server.controller.SurpriseBoxController.updateSeenFeedbacks(SurpriseBoxController.java:40) 
*******************************************************************************************

来自 ajax 调用的请求映射由 SurpriseBoxController.java 处理,如下所示

*******************************************************************************************
from line no:40

@RequestMapping(value = "/updatefeedbackseen/", method = RequestMethod.PUT, produces = "application/json")
    @ResponseBody
    void updateFeedBackSeen(@RequestBody List<FeedBack> feedback) {
        feedBackService.updateFeedBackSeen(feedback);

    } 

*******************************************************************************

【问题讨论】:

  • 是的,因为这个控制器没有生成 json。尝试从此控制器返回 json。
  • 你的 updateFeedBackSeen 方法有问题,异常大声说出来

标签: jquery ajax google-chrome spring-mvc put


【解决方案1】:

解决了。这个问题在控制台本身很明显。我的错。控制器期望一个 List 映射到该方法。但我收到了反馈[](只是数组)。我将类型更改为 FeedBack[] 为(@RequestBody FeedBack feedback[]),现在它在服务器端工作正常。但它现在返回一个解析错误文本。虽然它在后端工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 2023-04-05
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2018-01-02
    相关资源
    最近更新 更多