弹簧mvc中不允许405方法,但其他动作和控制器工作正常?

时间:2016-08-23 06:42:56

标签: java spring spring-mvc jax-rs

我是Spring的新手,而我的其他控制器运行良好但是当我尝试调用getmyfriends端点时,我得到了405 Method Not Allowed

@Controller
@Path("friends")
public class FreindsJersey {

    @Autowired
    private FriendsService friendsService;

    @POST
    @Path("getmyfriends")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getAllMyFriends(String json) {
        ReturnData returnData = (ReturnData) Parser.getJsonFromString(json, ReturnData.class);
        return Response.ok(friendsService.getMyFriendsList(returnData).getContainer()).build();
    }

    @GET
    @Path("unfriend/{userId}/{friendId}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response unfriendUser(@PathParam("userId") long userId, @PathParam("friendId") long friendId) {
        return Response.ok(friendsService.deleteAFriendOfTheUser(userId, friendId).getContainer()).build();
    }

}

我呼叫的网址是http://localhost:8080/Indulgge/friends/getmyfriends

1 个答案:

答案 0 :(得分:3)

TL; DR:getAllMyFriends需要POST

在浏览器中输入网址时,会使用GET。您无法从网址栏中POST

您的代码仅允许POST

@POST // <-- here
@Path("getmyfriends")
@Produces(MediaType.APPLICATION_JSON)
public Response getAllMyFriends(String json) {
    ReturnData returnData = (ReturnData) Parser.getJsonFromString(json, ReturnData.class);
    return Response.ok(friendsService.getMyFriendsList(returnData).getContainer()).build();
}

事实上,你有倒退 - safe and idempotent请求应为GET(例如getAllMyFriends); 不安全非幂等请求应为POST(例如unfriendUser)。