POST请求无法从Chrome中的服务器获得响应,但可以在邮递员中使用

时间:2019-01-15 13:41:16

标签: ajax spring-boot spring-mvc

我正在发出POST请求以启动引导端点,并希望从服务器返回数据。通过在Postman中测试我的API,效果很好。但是在进行测试时, chrome,它甚至没有响应,chrome NETWORK条甚至没有记录。 所以代码很简单,我找不到任何问题,RestController

 @PostMapping("/signup")
    public User signup(@RequestBody ModelUser user){
          //fetch data from DTO and craft a user
          User userData=user.adapter();
          //...code here omit for sake of brevity

          return userData;
    }

当我使用logger(slf4j)进行调试时,它确实从ajax获取数据。 和ajax:

  $("#sign-up").submit(function () {
           var userInfo={}
           userInfo["phone"]=$("#phone").val()
           userInfo["password"]=$("#password").val()
           $.ajax({
               //ajax successful send to spring boot endpoint
               type:"POST",
               contentType:"application/json",
               url:"http://localhost:8080/signup",
               data:JSON.stringify(userInfo)
           }).then(
               function(){
                  //this doesn't print in console
                  console.log("Hello Callback is executed")
               }
           )
       })

很奇怪,使用GET请求时从未遇到过这种情况,因为使用GET测试GetMapping端点时成功调用了Ajax回调。

哦,还有很多类似的问题

我没有在Chrome中获得任何响应状态代码,并且完全没有涉及CORS

2 个答案:

答案 0 :(得分:0)

您是否尝试过在Java中添加一个消费并产生Json的媒体类型

@PostMapping(path="/signup", consumes=MediaType.APPLICATION_JSON_VALUE, produces=MediaType.APPLICATION_JSON_VALUE)

并在javascript中明确设置Accept标头

   $.ajax({
           //ajax successful send to spring boot endpoint
           type:"POST",
           headers: {Accept : "application/json"},
           contentType:"application/json",
           url:"http://localhost:8080/signup",
           data:JSON.stringify(userInfo)
       })

答案 1 :(得分:0)

很抱歉我的前端技能不佳,主要原因是我不了解Javascript事件。

$("#sign-up").submit(function (e) {
    //e.preventDefault();
    var user={};
    user["phone"]="187308";
    user["name"]="icywater";
    $.ajax({
        type:'POST',
        contentType:'application/json',
        data:JSON.stringify(user),
        url:"http://localhost:8080/test"

    }).done(function(data){
        console.log("Hello Callback is executed");
        console.log(data)
    });
});

在此处单击“提交”时,它实际上已经提交了表单并且不等待ajax代码被执行,因此我应该使用e.preventDefault()来抑制默认行为。没什么 与POST或邮递员有关,它与表单提交默认行为,ahh,乌龙事件有关。

找到this page

后就知道了