JSON возвращает 3 объекта вместо одного в Java? - PullRequest
0 голосов
/ 09 июля 2019

У меня есть конечная точка REST, которую я вызываю для запроса некоторых данных, но она возвращает один и тот же объект три раза в моем ответе JSON, а не только возвращает разные результаты.

Это ответ, который я получаю:

[
    {
        "id": "5555 ",
        "label": "MAIN USER (5555)  "
    },
    {
        "id": "5555 ",
        "label": "MAIN USER (5555)  "
    },
   {
        "id": "5555 ",
        "label": "MAIN USER (5555)  "
    }
]

Это контроллер, который используется для генерации ответа JSON:

@RestController
public class AutoCompleteController {
    private AutoCompleteService autoCompleteService;
    private EntityManager em;

    public AutoCompleteController(AutoCompleteService autoCompleteService, EntityManager em) {
        this.autoCompleteService = autoCompleteService;
        this.em = em;
    }

    @RequestMapping(value = "jobs", method = RequestMethod.GET)
    public @ResponseBody
    List<AutoComplete> getSalary(@RequestParam(value = "autocomplete") String autocompleteValue) {
      return autoCompleteService.retrieveSalary(autocompleteValue);
   }
} 

В свою очередь, контроллер вызывает AutoCompleteService:

@Service
public class AutoCompleteService {
    private AutoCompleteRepository autocompleteRepository;

    public AutoCompleteService(AutoCompleteRepository autRepo) {
        this.autocompleteRepository = autRepo;
    }

    public List<AutoComplete> retrieveSalary(String jobClassCd) {
        List<AutoComplete>  salaries = autocompleteRepository.findAllByJobClassCdIsContaining(jobClassCd);
        if (salaries.size() <= 0) {
            throw new AutoCompleteNotFoundException(jobClassCd);
        }
        return salaries;
    }
}

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Если ваш запрос состоит в том, чтобы исключить дублирование информации, поступающей из службы автозаполнения, в коде Java, тогда можно было бы преобразовать информацию в набор, а затем обратно в список. Это вернет только один уникальный результат, при условии, что хэш-код и критерии равенства установлены правильно.

import java.util.*;

class AutoComplete {
    // Not using getter / setters just for convenience here
    public String id;
    public String label;

    public AutoComplete(String id, String label) {
        this.id = id;
        this.label = label;
    }

    @Override
    public boolean equals(Object other) {
        if (other instanceof AutoComplete) {
            AutoComplete o = (AutoComplete) other;
            return o.id.equals(this.id) && o.label.equals(this.label);
        }
        return false;
    }

    @Override
    public int hashCode() {
        return (this.id + "-" + this.label).hashCode();
    }

    public String toString() {
        return this.id + " -- " + this.label;
    }
}

class Main {
    public static void main(String[] args) {
        ArrayList<AutoComplete> initialList = new ArrayList<AutoComplete>();
        initialList.add(new AutoComplete("555", "MAIN"));
        initialList.add(new AutoComplete("555", "MAIN"));
        initialList.add(new AutoComplete("555", "MAIN"));

        System.out.println(initialList);

        HashSet<AutoComplete> deduped = new HashSet<AutoComplete>(initialList);

        List<AutoComplete> dedupedList = new ArrayList<AutoComplete>(deduped);

        System.out.println(dedupedList);
    }
}
0 голосов
/ 09 июля 2019

Просто убедитесь, что ваш метод autoCompleteService.retrieveSalary возвращает только 1 результат, проверьте вашу базу данных на наличие нескольких строк с одинаковым содержимым на основе вашего фильтра.Если вы всегда хотите получить 1 результат, сделайте возвращаемый объект, а не список <>.

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