Json corpo da solicitação de objeto java com mola-boot

vaia :

Eu tenho o seguinte pedido JSON

{
  "FreightCalculationRequest": {
    "Products": [
      {
        "sku": "123",
        "size": "S",
        "quantity": "1",
        "shipAlone": "True",
        "itemType": "Shoe"
      },
      {
        "sku": "123",
        "size": "S",
        "quantity": "1",
        "shipAlone": "True",
        "itemType": "Shoe"
      }
    ],
    "ShipToZip": "54452",
    "IsCommercial": "True"
  }
}

Estou tentando enviar esta solicitação ao método de controlador API como um objeto java personalizado e, em seguida, retornar o mesmo objeto como uma string JSON formatado. Eu estou recebendo uma resposta através do carteiro no entanto, para produtos e shiptoZip eu conseguir um nulo, e para isCommercial eu recebo falso, mas eu nem sequer têm falso como um valor para isCommercial no pedido. O que está acontecendo? Eu não sei como depurar muito bem em Java como eu basicamente estou verificando meu aplicativo cada vez digitando mvn primavera-boot: início

aqui é o meu objeto que estou voltando e usando como parâmetro para o método de controlador.

public class FreightCalculationRequest {

    private Product[] Products;
    private String ShipToZip;
    private boolean IsCommercial;

    public Product[] getProducts() { return this.Products; }
    public void setProducts(Product[] itemsRequest) { this.Products = itemsRequest; }

    public String getShipToZip() { return this.ShipToZip; }
    public void setShipToZip(String ShipToZip) { this.ShipToZip = ShipToZip; }

    public boolean getIsCommercial() { return this.IsCommercial; }
    public void setIsCommercial(boolean IsCommercial) { this.IsCommercial = IsCommercial; }

}

e aqui é o controlador método im chamada

@RequestMapping(value = "/test", produces = MediaType.APPLICATION_JSON_VALUE,  method = RequestMethod.POST)
FreightCalculationRequest TestCall(@RequestBody FreightCalculationRequest calculationRequest) {
    return calculationRequest;

}

Por que minha resposta não mostrando o mesmo que o pedido entrando.

update: eu adicionei @JsonProperty aos meus variáveis, e agora os olhares resposta como tal

{
    "isCommercial": false,
    "shipToZip": null,
    "products": null,
    "Products": null,
    "ShipToZip": null,
    "IsCommercial": false
}

Meio que perdi um pouco, também percebi que pode salvar minhas alterações enquanto mvn está em execução e vai auto compilação das mudanças

Update: Então o itemType na minha json estava realmente jogando um erro quando eu initally remover o embrulho de "FreightCalculationRequest" na resposta JSON, então eu pensei que era o problema, no entanto itemType é realmente um objeto no código para que ele se deveu a não me colocando em uma propriedade válida e ler o erro de análise json completamente, havia duas soluções para mim, envolvendo a resposta em outra classe, ou remover o FreightCalculationWrapping.

Eu também aprendi que eu preciso adicionar @JsonProperty para mapear o json

graças SO

user2004685:

Eu estou recebendo uma resposta através do carteiro no entanto, para produtos e shiptoZip eu conseguir um nulo, e para isCommercial eu recebo falso, mas eu nem sequer têm falso como um valor para isCommercial no pedido. O que está acontecendo?

Você vai ter que envolver o FreightCalculationRequest em uma nova classe de modelo.

Faça uma nova Wrapper classe,

public class FreightCalculationRequestWrapper {
    @JsonProperty("FreightCalculationRequest")
    private FreightCalculationRequest freightCalculationRequest;

    ...
}

Use esta nova Wrapper classe para lidar com seus pedidos:

@RequestMapping(value = "/test", produces = MediaType.APPLICATION_JSON_VALUE,  method = RequestMethod.POST)
FreightCalculationResponse TestCall(@RequestBody FreightCalculationRequestWrapper calculationRequest) {
    return calculationRequest;

}

Além disso, os nomes de propriedade em seu JSON começar com uma letra maiúscula.

Se você estiver usando Jackson, em seguida, você pode usar @JsonProperty(...)a anotação em seus campos de modelo para mapeá-los corretamente.

Por exemplo:

public class FreightCalculationRequest {
    @JsonProperty("Products")
    private Product[] Products;

    .
    .
    .
}

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=181720&siteId=1
Recomendado
Clasificación