【问题标题】:rest controller works but ajax post method return an error休息控制器工作但ajax post方法返回错误
【发布时间】:2019-09-23 04:01:37
【问题描述】:

我正在使用$.ajax 做一个发布方法,就是这个

$(function(){

     $("#postMembers").click(function(){
            let member ={
                firstName: "khookina",
                lastName : "khooak",
                age:1,
                sex:"female",
                duty:"undefined",
                dailyJeton:2
            }

            $.ajax({
                type: "post",
                url: "http://localhost:8080/RCP2/members",
                data: member,
                dataType: "application/json",
                success: function (response) {
                    alert("success");
                },
                error: function(error){
                    alert("error");


                }
            });


        }); 

我的休息控制器就是这个

@PostMapping(consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}, produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
public String createMembers(Member member) {
    if (member.hasError()) {
        throw new CreatePersonException("All the fields must be filled properly in order to create a new member.");
    }

    if (personDao.createMember(member)) {
        return "Member: " + member.getFirstName() + " " + member.getLastName() + " successfully created.";
    }

    return "couldn't create member, please try again later.";

}

我在执行这个 ajax post 方法的网页中有一个创建成员按钮,当我按下它时,一切正常,成员信息被发送到其余控制器,它被创建(100% 工作)并返回 @987654324 ajax post方法的@和error: function(error)被调用

有什么问题?

这是我使用 ajax 和 javascript 的第一天,我真的不明白发生了什么。

提前致谢

P.S 我已经尝试更改数据类型 text jsonjson 以及类似问题中建议的其他一些,但它们对我不起作用,所以我决定自己提出一个问题。

【问题讨论】:

  • “成员被创建”是什么意思?您在浏览器的“网络”选项卡中看到了什么? Spring 应用程序是否在控制台上显示任何内容? (另请注意:抛出异常是处理错误的好方法;返回带有人类可读错误消息的随机字符串不是。您可以在 Member 上使用 @Valid 让 Spring 为您进行检查。在 Java 中,方法应该以小写字母 (createMember) 开头,并且您应该研究 Spring Data,它将自动生成存储库。对于 POST,您可能希望返回带有 Location 标头的 ResponseEntity。)
  • @chrylis 感谢您的评论。对于 CreateMethod 的命名,这只是我没有注意到的一个错误,并且“成员被创建”意味着一切正常,正如您可以通过方法的名称猜测目标是创建一个成员。我会尝试返回一个 ResponseEntity 看看会发生什么。
  • @chrylis 我更改了我的休息控制器以返回 ResponseEntity 但仍然得到相同的结果。

标签: java jquery ajax spring-mvc spring-restcontroller


【解决方案1】:

尝试改变

data: JSON.stringify(member) 并且您将在结果中获得成功/

【讨论】:

  • 您好 Ronanki,感谢您的回答。我以前试过,它不能解决我的问题。
【解决方案2】:

从 ajax 请求中删除数据类型,它可以工作。

删除这个。

dataType: "application/json"

详情请咨询this

【讨论】:

  • 我尝试使用 data: {//elements} 而不是 data: member 它有效,但我必须删除您提到的 dataType: "application/json" 才能使其工作。
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 2018-11-04
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
  • 2014-03-11
  • 2017-09-01
  • 1970-01-01
相关资源
最近更新 更多