首页 > 解决方案 > Dockerized SpringBoot REST api 不支持请求方法“GET”

问题描述

我有一个小的弹簧应用程序,如下所示:

package com.example.demo.api;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("api/factorial")
@RestController
public class TestApi {

    @GetMapping
    public long factorial(){
        long startTime = System.nanoTime();
        int i;
        double fact=1;
        int number=50;//It is the number to calculate factorial
        for(i=1;i<=number;i++){
            fact=fact*i;
            System.out.println("Factorial of "+i+" is: "+fact);
        }
        long endTime = System.nanoTime();
        return (endTime - startTime);
    }
}

我已经生成了这个应用程序的一个 jar 并对其进行了 docker 化,如下所示:

FROM openjdk:8-jdk-alpine
ADD  ./demo-0.0.1-SNAPSHOT.jar /usr/src/factorial/
WORKDIR /usr/src/factorial
EXPOSE 8080
CMD java -XX:+PrintFlagsFinal $JAVA_OPTIONS -jar demo-0.0.1-SNAPSHOT.jar

然后我运行以下命令运行 docker 容器

docker run --rm --name factorialContainer -p 8080:8080 -e JAVA_OPTIONS="$(cat jvmFlags.txt)" suleka96/factorial:latest

然后我尝试使用 JMeter 向 REST 端点发出 HTTP 请求,如下所示 在此处输入图像描述

问题是,当我这样做时,我收到一条错误消息:

org.springframework.web.HttpRequestMethodNotSupportedException:不支持请求方法“GET”

但是,当我在本地运行 spring 应用程序(没有对其进行 docker 化)并从 JMeter 发送请求时,请求成功发送。

我究竟做错了什么?

标签: javaspring-bootdockerjmeter

解决方案


您的应用程序部署在 docker 中,因此它是虚拟机。那是另一台拥有自己IP地址的主机。但是您正在尝试将 GET 请求发送到本地主机。你应该得到你的 docker ip。在 Mac OS 中输入这个来获取 ip

主机> docker-machine ip 默认

访问该页面https://spring.io/guides/gs/spring-boot-docker/在该知识库中有一个关于 mac os 部署的部分


推荐阅读