如果我向服务器发送带有参数的 get 请求,我会收到 405 Method not allowed by Postman

I get a 405 Method not allowed by Postman if I send my server a get request with params

如果我向我的服务器发送一个带有参数的 GET 请求,我将得到一个 405 - Method not allowed

 package pkgService;

 import com.fasterxml.jackson.databind.ObjectMapper;
 import pkgData.pkgEmployee.User;
 import pkgServer.pkgUser.UserManagement;

 import javax.ws.rs.*;
 import javax.ws.rs.core.Response;

@Path("/user")
public class UserRouter {

     private UserManagement userManagement;
     private ObjectMapper objMap;

     public UserRouter() {
         this.userManagement = new UserManagement();
         objMap = new ObjectMapper();

         //TODO delete test data
         userManagement.addUser(new User(1,"lukad", "luki"));
         userManagement.addUser(new User(2,"meli", "malal"));
     }

     @GET
     @Path("{userId}")
     public Response getBook(@PathParam("userId") String id) {
         Response.ResponseBuilder response = Response.status(Response.Status.OK);
         try {
             response.entity(objMap.writeValueAsString(userManagement.getUser(id)));
         } catch (Exception e) {
             response.status(Response.Status.BAD_REQUEST);
             response.entity("[ERROR] " + e.getMessage());
         }
         return response.build();
     } }

我希望获得 ID 为 1 (lukad,luki) 的用户,但我收到了 405。

我的邮递员要求Url: http://localhost:8080/Server_war_exploded/user?userId=1

我是不是忘记了代码中的某些内容?

@Path("{userId}")

缺少正则表达式。它如何知道现在的用户 ID 是什么以及路径中的下一步是什么?

应该是这样的(如果你的id真的是一个字符串...): @Path("{userId:\w+}")

通过在用户 id 前添加“/”更改功能

@GET
@Path("/{userId}")
     public Response getBook(@PathParam("userId") String id) {
}

此外,如果您使用的是 PathParam,那么您需要将 url 也更改为

 http://localhost:8080/Server_war_exploded/user/1

其中 1 是用户 ID

但是如果你想使用

 http://localhost:8080/Server_war_exploded/user?userId=1

然后您需要使用 QueryParams 并更改您的代码如下

 @GET
 public Response getBook(@QueryParam("userId") String id) {
    }

使用这个 @Path("/{userId}")。这会起作用。

URL 会喜欢这个:http://localhost:8080/Server_war_exploded/user/{userId}

示例:http://localhost:8080/Server_war_exploded/user/1