Лучший способ явно конвертировать POJO в JSON в Spring RestController - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть существующий REST API в проекте весенней загрузки, который выглядит примерно так:

@GetMapping(value = "/api/projects")
public List<Project> getProjects() {
    List<Project> projects = projectsRepository.findAll();
    List<Project> processed = processProjects(projects);
    return processed;
}

Когда этот метод вызывается, возвращаемый JSON ответ выглядит примерно так:

{
    "JSON":"[
        {
            "id":"aaa",
            "simple":"SYMBOLIC_VALUE_BBB",
            "nested1":{
                "field1":"SYMBOLIC_VALUE_C1",
                "field2":"nonSymbolicValueC2",
                "field3":"SYMBOLIC_VALUE_C3"
            },
            "nested2":{
                "fieldA":"SYMBOLIC_VALUE_DDD"
            }
         },
         ...
     ]",
     "mode":"application/json"
}

Значения символов c переводятся в читабельную форму в интерфейсе пользователя. Все отлично работает Но теперь мне также нужна вторая версия этого метода, который выполняет перевод на стороне сервера. Примерно так:

@GetMapping(value = "/api/v2/projects")
public String getProjects() {
    List<Project> projects = projectsRepository.findAll();
    String projectsAsJson = ???
    String processedJson = processProjectsJson(projectsAsJson);
    return processedJson;
}

Что бы я положил, где находятся три знака вопроса (???)? Я хочу использовать ту же сериализацию json, которая используется в Spring Framework автоматически. Он должен быть устойчивым к любым изменениям конфигурации, которые могут произойти в будущем.

Большое спасибо.

1 Ответ

3 голосов
/ 05 февраля 2020

Добавьте атрибут ObjectMapper в свой контроллер, используйте внедрение зависимостей, чтобы получить его, а затем используйте: mapper.writeValueAsString(myObject);

Что-то вроде этого:

@Autowired
private ObjectMapper mapper;

@GetMapping(value = "/api/v2/projects")
public String getProjects() {
    List<Project> projects = projectsRepository.findAll();
    String projectsAsJson = mapper.writeValueAsString(projects);
    String processedJson = processProjectsJson(projectsAsJson);
    return processedJson;
}

Дайте мне знать, если это не работает.

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