Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “显示”;空";用于放置邮件和发件人_Java_Spring_Spring Boot_Vaadin - Fatal编程技术网

Java “显示”;空";用于放置邮件和发件人

Java “显示”;空";用于放置邮件和发件人,java,spring,spring-boot,vaadin,Java,Spring,Spring Boot,Vaadin,我在vaadin 14和spring boot上创建了一个聊天 当我开始聊天时,我必须登录并按姓名登录。每个进入聊天室的人都可以在授权后写消息 我有一个问题,当我发送消息时,聊天节目(null:null)这是错误的,我需要显示发件人的姓名和他的消息 我通过了调试器,在json中正常地回答所有输出 但当我打开聊天窗口时,发件人显示的不是消息,而是“null:null”) 主视图类 public class MainView extends VerticalLayout { privat

我在vaadin 14和spring boot上创建了一个聊天

当我开始聊天时,我必须登录并按姓名登录。每个进入聊天室的人都可以在授权后写消息

我有一个问题,当我发送消息时,聊天节目(null:null)这是错误的,我需要显示发件人的姓名和他的消息

我通过了调试器,在json中正常地回答所有输出

但当我打开聊天窗口时,发件人显示的不是消息,而是“null:null”)

主视图类

public class MainView extends VerticalLayout {
    private final MessagesInfoManager messagesInfoManager;
    private final RestService restService;
    private String username;
    private TextField textField;
    private Message messageLast;


    @Autowired
    public MainView(RestService restService) {
        this.messagesInfoManager = MessageConfigurator.getInstance().getChatMessagesInfoManager();
        addClassName("main-view");
        setSizeFull();
        setDefaultHorizontalComponentAlignment(Alignment.CENTER);

        H1 header = new H1("Vaadin Chat");
        header.getElement().getThemeList().add("dark");

        add(header);

        askUsername();
        this.restService = restService;
    }

    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(username);
        });

        add(layout);
    }

    private void showChat(String username) {
        MessageList messageList = new MessageList();

        List<Message> lasts = restService.getLast();
        for (Message message : lasts) {
            messageList.add(new Paragraph(message.getFromV() + ": " + message.getMessageV()));
        }

        messageLast = lasts.get(lasts.size() - 1);

        add(messageList, createInputLayout(username, messageList));
        expand(messageList);
    }

    private Component createInputLayout(String username, MessageList messageList) {
        HorizontalLayout layout = new HorizontalLayout();
        layout.setWidth("100%");

        TextField messageField = new TextField();
        messageField.addKeyDownListener(Key.ENTER, keyDownEvent -> sender(messageField, messageList));
        Button sendButton = new Button("Send");
        sendButton.addThemeVariants(ButtonVariant.LUMO_PRIMARY);

        layout.add(messageField, sendButton);
        layout.expand(messageField);

        messageField.addFocusListener(event -> {
            for (Message message : messagesInfoManager.getMessagesByUI(getUI())) {
                if (!message.getFromV().equals(username)) {
                    message.setUnread(false);
                    this.restService.updateMessage(message.getId(), message);
                }
            }
        });

        sendButton.addClickListener(click -> sender(messageField, messageList));
        messageField.focus();

        return layout;
    }

    private void sender(TextField textField, MessageList messageList) {
        Message message = new Message(username, textField.getValue());
        message = restService.saveMessage(message);
        messageLast = message;
        this.textField = textField;
     //   messagesInfoManager.updateMessageUIInfo(new MessageInfo(messageList, message, this));
        textField.clear();
        textField.focus();

    }

    @Scheduled(fixedDelay = 1000)
    public void scheduleFixedDelayTask() {

        MessageList messageList = new MessageList();

        List<LinkedHashMap> lasts = restService.getUnreadMessages(messageLast);

        for (LinkedHashMap message : lasts) {
            messageList.add(new Paragraph(message.get("fromV") + ": " + message.get("messageV")));
        }

        messagesInfoManager.updateMessageUIInfo(new MessageInfo(messageList, messageLast, this));

    }

}
我的github


json属性名称与
消息
类的字段名称不匹配。方法
Gson.fromJson(…)
在json中看到字段
fromV,messageV
,但是没有名为
fromV
messageV
的属性(因为它们被称为
fromV
messageV

您有几个选项可以解决此问题:

1) 将字段重命名为正确的camelCase名称,以及它们的getter/setter

private String messageV;

public String getMessageV(){...}
publis void setMessageV(String messageV){...}

2) 更改创建的json,使其属性名称中不包含camelCase。通过更改
Message::toString
的输出或使用适当/自动序列化(例如
Gson.toJson

3) 使用
@JsonProperty
注释对属性进行注释,以告知gson此属性在json中具有不同的名称。但getter/setter必须与实际的属性名匹配

@JsonProperty("messageV")
private String messagev;

public String getMessagev(...) 
public void setMessagev(String messagev){...}

那么
消息
对象中的值是空的?我最近没有使用Gson,但可能是因为
Message
类中的成员字段被称为
fromv
messagev
,而不是
fromv
messagev
?我更改了您的编写方式,但仍然不起作用。我更新了我的gitube,它们应该与你的JSON相同。如果您的JSON仍然是
“messageV”:“blabla”
,那么这些字段也应该被称为
messageV
@JsonProperty("messageV")
private String messagev;

public String getMessagev(...) 
public void setMessagev(String messagev){...}