当部署到 jboss EAP 7.1 时,此 URL 不支持 HTTP Post 方法
HTTP Post method not supported by this URL when deployed to jboss EAP 7.1
我有一个 REST API,部署在 JBoss EAP 7.1 上。当我在
点击URL
http://localhost:8080/MyApp/group
在 postman 中,它给出“此 URL 不支持 HTTP 方法 POST”错误,状态代码为 405。
当我在嵌入式 tomcat 服务器上部署这个 API 时,它工作得很好。这是我的控制器
@RestController
public class RequestController {
@Autowired
private GroupService groupService;
@PostMapping( "/group" )
public GroupInfo fetchGroupInfo( @RequestBody GroupInfo groupInfo ) {
long groupId = groupInfo.getGroupId();
return groupService.getGroup( groupId );
}
}
主要class
@SpringBootApplication
public class MyApp extends SpringBootServletInitializer {
/**
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder){
return builder.sources(MyApp.class);
}
}
pom.xml
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.my.package</groupId>
<artifactId>MyApp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>MyApp</name>
<packaging>war</packaging>
<properties>
<java.version>1.8</java.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
<build>
<finalName>MyApp</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
部署未显示任何错误消息。但是,它确实显示以下警告
WARN [org.jboss.weld.deployer] (MSC service thread 1-4) WFLYWELD0013: Deployment optumRx-0.0.1-SNAPSHOT.war contains CDI annotations but no bean archive was found (no beans.xml or class with bean defining annotations was present).
class 文件在 jboss 的部署文件夹中丢失。你能告诉我,我错过了什么吗?
关于路径:pom.xmlMyApp 中的构造在url中没有说方式,而是关于工件的名称。
尝试使用 http://localhost:8080/group(没有 MyApp)
关于其他:如果要在 jboss 上部署,则必须在 pom.xml 中排除 tomcat:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
关于 CDI 警告 - 尝试在 MyApp class
上使用 @ComponentScan(basePackages="your.package")
看来我错过了项目中的 servlet api 依赖项。添加该依赖项后,一切正常。嵌入式 Tomcat 服务器有这个 jar,所以我在 Tomcat 上部署时不需要它。
我有一个 REST API,部署在 JBoss EAP 7.1 上。当我在
点击URLhttp://localhost:8080/MyApp/group
在 postman 中,它给出“此 URL 不支持 HTTP 方法 POST”错误,状态代码为 405。
当我在嵌入式 tomcat 服务器上部署这个 API 时,它工作得很好。这是我的控制器
@RestController
public class RequestController {
@Autowired
private GroupService groupService;
@PostMapping( "/group" )
public GroupInfo fetchGroupInfo( @RequestBody GroupInfo groupInfo ) {
long groupId = groupInfo.getGroupId();
return groupService.getGroup( groupId );
}
}
主要class
@SpringBootApplication
public class MyApp extends SpringBootServletInitializer {
/**
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder){
return builder.sources(MyApp.class);
}
}
pom.xml
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.my.package</groupId>
<artifactId>MyApp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>MyApp</name>
<packaging>war</packaging>
<properties>
<java.version>1.8</java.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
<build>
<finalName>MyApp</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
部署未显示任何错误消息。但是,它确实显示以下警告
WARN [org.jboss.weld.deployer] (MSC service thread 1-4) WFLYWELD0013: Deployment optumRx-0.0.1-SNAPSHOT.war contains CDI annotations but no bean archive was found (no beans.xml or class with bean defining annotations was present).
class 文件在 jboss 的部署文件夹中丢失。你能告诉我,我错过了什么吗?
关于路径:pom.xml
关于其他:如果要在 jboss 上部署,则必须在 pom.xml 中排除 tomcat:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
关于 CDI 警告 - 尝试在 MyApp class
上使用 @ComponentScan(basePackages="your.package")看来我错过了项目中的 servlet api 依赖项。添加该依赖项后,一切正常。嵌入式 Tomcat 服务器有这个 jar,所以我在 Tomcat 上部署时不需要它。