unmodifiableList: представление, а не снимок
var source = new ArrayList<>(List.of("A"));
var view = Collections.unmodifiableList(source);
var snapshot = List.copyOf(source);
source.add("B");
System.out.println(view); // [A, B]
System.out.println(snapshot); // [A]
Обёртка запрещает изменение списка через view, но показывает изменения исходного списка.
List.copyOf(), доступный с Java 10, создаёт независимый по составу неизменяемый список и не принимает null-элементы. Копия поверхностная: изменяемые объекты внутри неё остаются теми же объектами.
При возврате данных из сервиса решите, нужен читателю текущий вид коллекции или снимок на момент вызова.
#Java
Java Библиотека | Мы в Телеграм