当前位置: 首页 > 知识库问答 >
问题:

Spring Boot和Vaadin UI无法访问?

慕乐池
2023-03-14

我建立了一个spring boot vaadin项目,并根据springs教程实现了这个类,但无法使用localhost:8080/ui访问ui。我做错了什么?

我的UI类:

package net.lawyd.server.ui;

import com.vaadin.annotations.Theme;
import com.vaadin.server.VaadinRequest;
import com.vaadin.spring.annotation.SpringUI;
import com.vaadin.ui.Button;
import com.vaadin.ui.Notification;
import com.vaadin.ui.UI;

@SpringUI(path = "/ui")
@Theme("valo")
public class VaadinUI extends UI {

    @Override
    protected void init(VaadinRequest request) {
        setContent(new Button("Click me", e -> Notification.show("Hello Spring+Vaadin user!")));
    }
}

这是我的Spring配置类:

package net.lawyd.server.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@ComponentScan("net.lawyd.server")
@EnableJpaRepositories("net.lawyd.server")
@EnableTransactionManagement
public class SpringConfig {

    // Nothing to do here

}

这是我的pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>net.lawyd</groupId>
    <artifactId>lawyd-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.2.RELEASE</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jersey</artifactId>
        </dependency>
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>20.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.rest-assured</groupId>
            <artifactId>rest-assured</artifactId>
            <version>3.0.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

[更新1]我注意到这条日志消息:

无法增强@Configuration bean definition'com.vaadin.spring。因为它的单例实例创建得太早。典型的原因是具有BeanDefinitionRegistryPostProcessor返回类型的非静态@Bean方法:考虑将此类方法声明为“static”。

[更新2]我使用start.spring创建了一个空的Spring Boot应用程序。io并插入教程中的演示。它在那里工作,所以它必须与我的设置有关。

[更新3]我发现它与球衣配置有关,当我把它拿出来时,它可以工作,但球衣不再:

@SpringBootConfiguration
public class JerseyConfig extends ResourceConfig {

    public JerseyConfig() {
        register(TodoResource.class);
        register(HealthResource.class);
    }
}

这也是github上的代码

共有1个答案

鲁旭
2023-03-14

我发现了根问题:Jersey被映射到根,因此对根的所有调用都被拦截。将应用程序路径(“/api”)更改为非根路径解决了问题:

@SpringBootConfiguration
@ApplicationPath("/api")
public class JerseyConfig extends ResourceConfig {
 类似资料:
  • tl;如果在Docker容器中运行,一个RestController正确回答,另一个则不正确。 该服务有两个API 和。 它们都是通过docker compose运行的。 返回。 返回一个空的200响应。正如预期的那样。 应该返回一个200响应和一个每次调用API时都会增加的数字。可悲的是,事实并非如此。 在本地运行该服务可以提供预期的结果。 maven spotify插件用于从以下创建图像。 我

  • 我在eclipse中初始化了一个SpringBoot Rest,并使其成为一个动态Web项目。遵循了三轮胎原则,并在控制器类中声明了endpointURL。项目部署良好,但一旦我尝试访问返回404错误的endpoint。请参阅下面的示例。二手编译器-Maven和服务器-apache tomcat 9.0 主类.java } 示例控制器类

  • 本文向大家介绍springBoot项目启动类启动无法访问的解决方法,包括了springBoot项目启动类启动无法访问的解决方法的使用技巧和注意事项,需要的朋友参考一下 网上也查了一些资料,我这里总结。下不来虚的,也不废话。 解决办法: 1、若是maven项目,则找到右边Maven Projects --->Plugins--->run(利用maven启动)则可以加载到webapp资源 2、上面方法

  • creds application.yml服务器:端口:9000 Eureka:Client:ServiceUrl:DefaultZone:http://localhost:8761/Eureka/ 发现application.yml

  • 我的财产包括: 我的申请。属性,如: 测试是: 故障原因: 我尝试过很多事情,比如: 添加SpringBootTest将PropertySource替换为 TestPropertySource测试属性源 Spring开机版本为:2.2.2。释放 有人有主意吗?