Spring data util пары переименовывают в json name - PullRequest
1 голос
/ 18 октября 2019

мой первый пост здесь. Я работаю над API, и я обнаружил проблему, которую я не знаю, как ее решить. Я пытаюсь получить оставшийся запас всех продуктов в моей базе данных. Я использую Spring boot и MongoDB с зависимостью Spring Data. Вот мой код:

@GetMapping("/remaining-stock")
    public ResponseEntity<List<Pair<String, Integer>>> showAllStock() throws EmptyDepositException{
        List<Pair<String, Integer>> allStock;
        try {
            allStock = depServ.showAllStock();
        }catch(EmptyDepositException ex) {
            allStock = null;
        }
        return ResponseEntity.ok(allStock);
    }

Когда я делаю этот запрос GET, я получаю JSON:

[
    {
        "first": "Water",
        "second": 5
    },
    {
        "first": "Milk",
        "second": 40
    }
]

Значения в порядке, но я хочу переименовать имена переменных с помощьюлучшее имя, подобное этому:

[
    {
        "Product name": "Water",
        "Remaining stock": 5
    },
    {
        "Product name": "Milk",
        "Remaining stock": 40
    }
]

Есть способ сделать это?

Извините за мой английский, я из Аргентины, так что, возможно, что-то не понятно. Я надеюсь, что вы можете мне помочь. Спасибо всем заранее.

Ответы [ 2 ]

1 голос
/ 18 октября 2019

Вы можете использовать @JsonProperty annotation, что означает, что field name используется в качестве имени свойства без каких-либо изменений, но его можно указать непустым значением, чтобы указать другое имя. Имя свойства относится к имени, используемому извне, как field name в объектах JSON.

public class Product implements Serializable {

    @JsonProperty("Product name")
    private String first;

    @JsonProperty("Remaining stock")
    private long second;

    // implement methods for getters and setters
}
0 голосов
/ 18 октября 2019

С Pair Class вы не можете этого сделать. Я предлагаю вам создать класс DTO, как показано ниже:

public class CustomPair {
    @JsonProperty("Product name")
    private String first;
    @JsonProperty("Remaining stock")
    private String second;

    // standard getters and setters
}

Тогда ваш контроллер будет выглядеть так:

@GetMapping("/remaining-stock")
    public ResponseEntity<List<CustomPair>> showAllStock() throws EmptyDepositException{
        List<CustomPair> allStock;
        try {
            allStock = depServ.showAllStock(); // depServ.showAllStock(); should return List<CustomPair>
        }catch(EmptyDepositException ex) {
            allStock = null;
        }
        return ResponseEntity.ok(allStock);
    }
...