首页 > 解决方案 > 'POST' 类型的 Ajax 请求不起作用,仅使用 'GET'

问题描述

我正在尝试向我的 springboot mvc 控制器发送和 ajax 发布请求,但没有成功。我查看了许多类似的主题,尝试了给定的解决方案,但根本没有成功。如果我将请求类型更改为 GET,它会触发控制器端点。

端点功能甚至没有在控制器中被触发。它在浏览器控制台中仅显示以下错误:jquery-3.4.1.js:9837 POST http://localhost:8080/rede-credenciada 500

我向邮递员提出了同样的要求,它给出了以下错误:

{
    "timestamp": "2020-07-09T17:46:20.920+0000",
    "status": 999,
    "error": "None",
    "message": "No message available"
} 

注意:它只发生在 POST 请求中,如果我更改为 GET,它可以正常工作。该请求被控制器“监听”。

这是我的ajax请求:

const json = {
    idGrupoProcedimento: 0,
    idTipoEspecialidade: $("#especialidade").val(),
    uf: $("#estado").val(),
    codCidade: $("#cidade").val()
}

const jsonString = JSON.stringify(json);

$.ajax({
    url: "/rede-credenciada",
    type: 'POST',
    contentType: "application/json",
    dataType: "application/json",
    data: jsonString,
    success: function(data){
        console.log(data);
    },
    error: function(e) {
        console.log(e.message);
    }
});

在这里,我的端点:

@RequestMapping(value = "/rede-credenciada", method = RequestMethod.POST, consumes = "application/json")
@ResponseBody
public RedeCredenciadaResponse buscaRedeCredenciadaPorFiltro(@RequestBody RedeCredenciadaRequest request) {
        
    ... some logic
    
    RedeCredenciadaResponse redeCredenciada = new RedeCredenciadaResponse();
    
    redeCredenciada.setPessoasFisicas(pessoas);
    redeCredenciada.setEmpresas(empresas);
    
    return redeCredenciada;
}

这是我的包装类:

public class RedeCredenciadaRequest {

private int idGrupoProcedimento;

private int idTipoEspecialidade;

private String uf;

private String codCidade;

public int getIdGrupoProcedimento() {
    return idGrupoProcedimento;
}

public void setIdGrupoProcedimento(int idGrupoProcedimento) {
    this.idGrupoProcedimento = idGrupoProcedimento;
}

public int  getIdTipoEspecialidade() {
    return idTipoEspecialidade;
}

public void setIdTipoEspecialidade(int idTipoEspecialidade) {
    this.idTipoEspecialidade = idTipoEspecialidade;
}

public String getUf() {
    return uf;
}

public void setUf(String uf) {
    this.uf = uf;
}

public String getCodCidade() {
    return codCidade;
}

public void setCodCidade(String cidade) {
    this.codCidade = cidade;
}

在此处输入图像描述 错误:

标签: javajqueryajaxspring-bootpost

解决方案


在您正在使用的 ajax 请求中dataType:'application/json',根据jQuery's Ajax-Related Methods Description

// The type of data we expect back
dataType : "json",

dataType应该是json,或xml,或html等。


推荐阅读