2 / 1 / 1
Регистрация: 24.04.2010
Сообщений: 76

Комплексный json - ответ в spring boot используя jackson

30.03.2018, 22:13. Показов 2571. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу spring mvc.
Для отправки json использую view с полями id, name, phone. И jackson. После выполнения запроса в service (например, после save) нужно отправить пользователю результат вида
JSON
1
{"data":{"id":1}}
.
Либо
JSON
1
{"data":{"result":"success"}}
.
В общем что-то в data . Это может быть набор параметров. Наверняка есть какая-нибудь аннотация для класса контроллера, которая указывает на класс-обёртку, формирующего в data нужный результат?
Буду благодарен за подсказку или ссылку. В интернете гугглил, но мало что понял

model Users
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Entity
@Table(name = "Users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;
 
    /**
     * Иия
     */
    @Basic(optional = false)
    @Column(name = "name")
    private String Name;
 
    @Basic(optional = false)
    @Column(name = "phone")
    private String phone;
    /*...getter, setter...*/
}
view UserView
Java
1
2
3
4
5
6
7
8
9
@JsonInclude(JsonInclude.Include.NON_NULL)
public class UserView {
    @ApiModelProperty
    public Long id;
 
    public String Name;
 
    public String phone;
}
controller UserController
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@RestController
@RequestMapping(value = "/api/user", produces = APPLICATION_JSON_VALUE)
@Api(value = "UserControllerAPI")
public class UserController  {
/*...service  т.д....*/
    @ApiOperation(value = "addUser", nickname = "addUser", httpMethod = "POST")
    @ApiResponses(value = {
            @ApiResponse(code = 200, message = "Success", 
response = User.class),
            @ApiResponse(code = 404, message = "Not Found"),
            @ApiResponse(code = 500, message = "Failure")})
    @RequestMapping(value = "/save", method = {POST})
    public void addUser(@RequestBody UserView userView) {
        userService.save(userView);
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.03.2018, 22:13
Ответы с готовыми решениями:

Не отрабатывает when() на моке BusinessProcessManagementImpl сервиса json-rpc на Spring Boot
Не отрабатывает when() на моке BusinessProcessManagementImpl сервиса json-rpc на Spring Boot Используемая зависимость ...

Как запустить Java метод из JavaScript используя Spring Boot
Всем, привет! Возник очередной вопрос по спрингу, а именно как из JS функции вызвать метод Java. А теперь грязные подробности. Есть к...

Spring feign jackson timezone
Собсно есть приложение с сабжем. При вызове фейном метода, передаем туда объект (класс объекта не мой - менять его никак не могу), в...

5
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
31.03.2018, 07:19
Используй ResponseBodyAdvice https://stackoverflow.com/ques... repository
1
2 / 1 / 1
Регистрация: 24.04.2010
Сообщений: 76
31.03.2018, 12:02  [ТС]
Цитата Сообщение от LeX Посмотреть сообщение
Используй ResponseBodyAdvice https://stackoverflow.com/ques... repository
Спасибо за наводку! Кажется помогло. Сделал вот так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
@ControllerAdvice
public class JSONResponseWrapper implements ResponseBodyAdvice<Object> {
 
    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        return true;
    }
 
    @Override
    @SuppressWarnings("unchecked")
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
        if (body instanceof List) {
            return new Wrapper<>((List<Object>) body);
        }
 
        return new WrapperObj<Object>(body);
    }
 
    @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
    @JsonSerialize
    private class Wrapper<T> {
        private final List<T> data;
 
        public Wrapper(List<T> data) {
            this.data = data;
        }
    }
 
    @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
    @JsonSerialize
    private class WrapperObj<T> {
        private final Object data;
 
        public WrapperObj(Object data) {
            this.data = data;
        }
    }
}
Супер! в контроллере нужно только объект или коллекцию объектов вернуть - и эта штука сама понимает во что обернуть!
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
31.03.2018, 15:16
два врапера не надо и так работать будет (не нужен который с листом)
1
2 / 1 / 1
Регистрация: 24.04.2010
Сообщений: 76
31.03.2018, 15:33  [ТС]
Действительно, врапер с листом лишний. Спасибо!
0
1 / 1 / 0
Регистрация: 23.09.2017
Сообщений: 4
09.08.2018, 18:24
А где сама обёртка то? ({"data": которая)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.08.2018, 18:24
Помогаю со студенческими работами здесь

Как можно распарсить xml на классы Java, имея только wsdl, используя Spring Boot?
Как можно распарсить soap xml на классы Java, имея только wsdl, используя Spring Boot? Из WSDL использую класс searchDepositInput,...

Spring Jackson. force date format
Приходится работать с чужими классами, надо сделать так, чтобы спринг всегда использовал тот формат даты, который я укажу, игнорируя при...

Выборка данных из нескольких таблиц используя Spring Data JPA Repository и преобразование в json
Всем привет! Сейчас мне данные отдаются в таком виде: Эти данные берутся из одной таблицы public_organisations. Но есть...

Json (Jackson) значение вместо объекта
Подскажите, как с помощью аннотаций можно упростить объект до значения? На примере: есть класс public class Message { ...

Java Json Jackson десериализация дженерики
Хочу сделать так, чтоб этот метод «convertResponceInObjects» работал с разными объектами, но не получается Идея подсвечивает эту...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru