Удалите скобки [ ] из ответа json

#java #json #spring #spring-security

Вопрос:

Api возвращает {«полномочия»: [{«полномочия»: «Сотрудник»}]}

Я хочу удалить [ ]

 @RequestMapping(value=/"autho", method="GET", produces=APPLICATION_JSON_VALUE)
public ResponseEntity getAuthorities(final User usr){
    return ResponseEntity.ok(new GetAuthorityResponse(usr.getAuthorities()));
}
 

Здесь getAuthorities() относится к типу org.springframework.security Collection<GrantedAuthority> .
Функция GetAuthorityResponse выполняет приведение от Collection<GrantedAuthority> до Collection<CustomAuthority> .
CustomAuthority-это перечисление.

 @JsonFormat(shape=JsonFormat.Shape.OBJECT)
public enum CustomAuthority implements GrantedAuthority{
EMPLOYEE("EMPLOYEE"), EMPLOYEE1("EMPLOYEE1");
private final string authority;
// Constructor and getter
}
 

Обновление: Эта ошибка уже была устранена в предыдущих спринтах. Его по ошибке переназначили.

Комментарии:

1. Если ответ потенциально может возвращать несколько авторитетных источников, зачем вам удалять слой сбора?

2. название getAuthorities подразумевает, что будет возвращено несколько значений, поэтому вам нужна коллекция. Если вы хотите, чтобы возвращался только один орган, измените модель данных.

3. @Thomas, удаляя слой коллекции, вы имеете в виду скобки? Если да, то просто исправлена ошибка из невыполненной работы, в которой ответ json не должен быть массивом.

4. @f1sh спасибо за комментарий. Но он может возвращать несколько значений.

5. Тогда вы не можете просто удалить [ ] их, так как они представляют собой список в JSON.

Ответ №1:

Я думаю, что есть некоторая путаница вокруг JSON. {«полномочия»: [{«полномочия»: «Сотрудник»}]} [] отмечает коллекцию. Это означает, что он содержит «список авторитетов». Это полезно, потому что ваш объект JSON может хранить несколько полномочий. например:

 {"authorities": [ {"authority": "Employee"}, {"authority": "CEO"},{"authority": "Admin"},{"authority": "Customer"} ]
}
 

если вы хотите удалить [ ]

если ваш вариант использования вынуждает вас удалить коллекцию из объекта JSON, есть несколько простых способов сделать это.

  1. Если у вас есть контроль над API REST, вы можете изменить его, чтобы он не возвращал коллекции. Однако это не рекомендуется, так как это, скорее всего, что-то сломает. Если вы собираетесь это сделать, обсудите это со своей командой.
  2. Когда API возвращает объект JSON, вы можете создать новый объект JSON из данного объекта JSON, получить первый элемент в коллекции и сохранить его как обычное значение JSON. Я не знаю, зачем вам это нужно, наличие коллекции кажется отличным, но если вам придется, это будет утомительным способом решения вашей проблемы.

Я надеюсь, что это поможет! Если у вас есть вопросы, задавайте их прямо сейчас 😊

Комментарии:

1. Спасибо за ответ. Вы можете проверить обновленный вопрос прямо сейчас.

2. @Adil нет проблем! Рад, что его починили. всегда приятно получить уже определенное задание 😜