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

Реализация REST/API (JSON) в Spring Boot

28.11.2019, 07:07. Показов 1507. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я создал проект на спринг буте, используя Ваадин фреймворк создал чат, где несколько людей могут переписываться в интерфейсе(в браузере). Так вот у меня все работает, только серверную часть нужно реализовать через Rest/API(JSON)

Application class
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@SpringBootApplication
public class Application {
 
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
 
 
    @Bean
    UnicastProcessor<ChatMessage> publisher(){
        return  UnicastProcessor.create();
    }
 
    @Bean
    Flux<ChatMessage> messages(UnicastProcessor<ChatMessage> publisher) {
        return publisher.replay(30).autoConnect();
    }
}
ChatMessage class
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class ChatMessage {
  private String from;
  private String message;
 
  ChatMessage(String from, String message) {
    this.from = from;
    this.message = message;
  }
 
  String getFrom() {
    return from;
  }
 
  String getMessage() {
    return message;
  }
}
MainView class

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
@StyleSheet("frontend://styles/styles.css")
@Route
@PWA(name = "Vaadin Chat", shortName = "Vaadin Chat")
@Push
public class MainView extends VerticalLayout {
 
  private final UnicastProcessor<ChatMessage> publisher;
  private final Flux<ChatMessage> messages;
  private String username;
 
 
  public MainView(UnicastProcessor<ChatMessage> publisher,
                  Flux<ChatMessage> messages) {
    this.publisher = publisher;
    this.messages = messages;
    addClassName("main-view");
    setSizeFull();
    setDefaultHorizontalComponentAlignment(Alignment.CENTER);
 
    H1 header = new H1("Vaadin Chat");
    header.getElement().getThemeList().add("dark");
 
    add(header); 
 
    askUsername();
  }
 
 
  private void askUsername() {
    HorizontalLayout layout = new HorizontalLayout();
    TextField usernameField = new TextField();
    Button startButton = new Button("Start chat");
 
    layout.add(usernameField, startButton);
 
    startButton.addClickListener(click -> {
      username = usernameField.getValue();
      remove(layout);
      showChat();
    });
 
    add(layout);
  }
 
  private void showChat() {
    MessageList messageList = new MessageList();
 
    add(messageList, createInputLayout());
    expand(messageList);
 
 
    messages.subscribe(message -> {
      getUI().ifPresent(ui ->
          ui.access(() ->
              messageList.add(
                  new Paragraph(message.getFrom() + ": " +
                      message.getMessage())
              )
          ));
 
    });
  }
 
  private Component createInputLayout() {
    HorizontalLayout layout = new HorizontalLayout();
    layout.setWidth("100%");
 
    TextField messageField = new TextField();
    Button sendButton = new Button("Send");
    sendButton.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
 
    layout.add(messageField, sendButton);
    layout.expand(messageField);
 
    sendButton.addClickListener(click -> {
      publisher.onNext(new ChatMessage(username, messageField.getValue()));
      messageField.clear();
      messageField.focus();
    });
    messageField.focus();
 
    return layout;
  }
 
}
MessageList class

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class MessageList extends Div {
 
  public MessageList() {
    addClassName("message-list");
  }
 
  @Override
  public void add(Component... components) {
    super.add(components);
 
    components[components.length-1]
        .getElement()
        .callFunction("scrollIntoView");
  }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.11.2019, 07:07
Ответы с готовыми решениями:

Spring Boot REST сервис
Создаю в учебных целях REST сервис и постоянно возникают различные вопросы, каждый раз создавать тему не хочется по этому буду спрашивать...

Относительный адрес REST Spring Boot
Здравствуйте! Подскажите, пожалуйста, как можно сделать так, чтобы мне не нужно было в конфигурацию микросервисов добавлять url сервера...

Spring, REST, Json
Добрый день, Возникает следующая ошибка: HTTP Status 415 - description The server refused this request because the request...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.11.2019, 07:07
Помогаю со студенческими работами здесь

Spring, Rest, Json, LocalData
REST method POST вот такой json мапитса и все ок { &quot;mark&quot;:false, &quot;surname&quot;:&quot;test&quot;, &quot;name&quot;:&quot;test&quot;, ...

Комплексный json - ответ в spring boot используя jackson
Пишу spring mvc. Для отправки json использую view с полями id, name, phone. И jackson. После выполнения запроса в service (например,...

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

Spring REST, Hibernate. Сложности десериализации JSON при one-to-many
Всем добрый день. Возникла проблема, подходящее решение которой никак не нагуглю. Делаю REST API на Spring и Hibernate. При попытке...

Java+Rest API + JSON
Добрый вечер. Прошу вас указать с чего начать, совсем запутался. Хочу написать контроллеры, которые принимают/возвращают JSON. Пусть...


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

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

Новые блоги и статьи
Реализация многопоточных сетевых серверов на Python
py-thonny 16.05.2025
Когда сталкиваешься с необходимостью писать высоконагруженные сетевые сервисы, выбор технологии имеет критическое значение. Python, со своей элегантностью и высоким уровнем абстракции, может. . .
C# и IoT: разработка Edge приложений с .NET и Azure IoT
UnmanagedCoder 16.05.2025
Мир меняется прямо на наших глазах, и интернет вещей (IoT) — один из главных катализаторов этих перемен. Если всего десять лет назад концепция "умных" устройств вызывала скептические улыбки, то. . .
Гибридные квантово-классические вычисления: Примеры оптимизации
EggHead 16.05.2025
Гибридные квантово-классические вычисления — это настоящий прорыв в подходах к решению сложнейших вычислительных задач. Представьте себе союз двух разных миров: классические компьютеры, с их. . .
Использование вебсокетов в приложениях Java с Netty
Javaican 16.05.2025
HTTP, краеугольный камень интернета, изначально был спроектирован для передачи гипертекста с минимальной интерактивностью. Его главный недостаток в контексте современных приложений — это. . .
Реализация операторов Kubernetes
Mr. Docker 16.05.2025
Концепция операторов Kubernetes зародилась в недрах компании CoreOS (позже купленной Red Hat), когда команда инженеров искала способ автоматизировать управление распределёнными базами данных в. . .
Отражение в C# и динамическое управление типами
stackOverflow 16.05.2025
Reflection API в . NET — это набор классов и интерфейсов в пространстве имён System. Reflection, который позволяет исследовать и манипулировать типами, методами, свойствами и другими элементами. . .
Настройка гиперпараметров с помощью Grid Search и Random Search в Python
AI_Generated 15.05.2025
В машинном обучении существует фундаментальное разделение между параметрами и гиперпараметрами моделей. Если параметры – это те величины, которые алгоритм "изучает" непосредственно из данных (веса. . .
Сериализация и десериализация данных на Python
py-thonny 15.05.2025
Сериализация — это своего рода "замораживание" объектов. Вы берёте живой, динамический объект из памяти и превращаете его в статичную строку или поток байтов. А десериализация выполняет обратный. . .
Чем асинхронная логика (схемотехника) лучше тактируемой, как я думаю, что помимо энергоэффективности - ещё и безопасность.
Hrethgir 14.05.2025
Помимо огромного плюса в энергоэффективности, асинхронная логика - тотальный контроль над каждым совершённым тактом, а значит - безусловная безопасность, где безконтрольно не совершится ни одного. . .
Многопоточные приложения на C++
bytestream 14.05.2025
C++ всегда был языком, тесно работающим с железом, и потому особеннно эффективным для многопоточного программирования. Стандарт C++11 произвёл революцию, добавив в язык нативную поддержку потоков,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru