Java - JSON вывод не ожидается, как того предлагает консоль - PullRequest
0 голосов
/ 02 апреля 2020

Я новичок в Java и пишу API.

У меня есть две вещи: HashMap с именем db, который должен быть возвращен как JSON, и ArrayList с именем defaultParameters. В основном то, что делает приложение, следующее:

db в основном содержит массив объектов пар ключ-значение, которые должны быть возвращены как JSON, когда пользователь делает запрос GET по этому адресу.

defaultParameters - это в основном список пар ключ-значение по умолчанию. Если в этом объекте нет пары ключ-значение, тогда этот объект принимает эту пару ключ-значение по умолчанию.

Мне удалось отобразить его на консоли, но по какой-то причине обновленные значения не отображаются в JSON, когда я выполняю запрос на получение.

Вот соответствующие фрагменты кода:

    private static ArrayList<Item> DB = new ArrayList<>();
    private static HashMap<String, String> defaultValues = new HashMap<>();
    private void updateAllItems(){
        for(Item item : DB){
            for(Map.Entry entry : defaultValues.entrySet()){
                String currentField = (String) entry.getKey();
                String currentValue = (String) entry.getValue();
                item.addField(currentField, currentValue);
            }
        }
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getAllItems() {
        updateAllItems();
        for(Item item : DB){
            // Test code that I added 
            item.printItem();
        }
        return Response.ok(DB).build();
    }

Фрагменты класса Item

public class Item {

    private HashMap<String, String> item = new HashMap<>();

    public void addField(String key, String value){
        item.put(key, value);
    }

    public void printItem(){
        for(Map.Entry entry : item.entrySet()){
            String currentField = (String) entry.getKey();
            String currentValue = (String) entry.getValue();
            System.out.println(currentField + ": " + currentValue);
        }
    }
}

Выполнение запроса POST и выполнение запроса GET приводит к получению следующее:

На консоли (что-то: notsomething) новое:

seller: Mrs. Fields
price: 49.99
title: Cookies
category: 42
something: notsomething

Ответ JSON однако:

[{"category":"42","seller":"Mrs. Fields","price":"49.99","title":"Cookies"}]

JSON отсутствует новая пара ключ-значение, которая есть в консоли. Я пытаюсь, чтобы JSON отражал то, что делает консоль. У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 03 апреля 2020

Хорошо, подумав, я понял, что делать.

Я изменил свой код с

public class Item {

на

public class Item extends HashMap<String, String> {

и удалил

private HashMap<String, String> item = new HashMap<>();

, что означает, что мне пришлось изменить item до this. С тех пор как я решил использовать каждый экземпляр в качестве хэш-карты, я могу также расширить хэш-карту, которая также изменит экземпляр элемента.

Спасибо за помощь всем. Комментарий дал мне больше понимания того, что я пытался сделать, что привело к решению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...