将GET和POST服务结合到单一服务中?

问题描述 投票:1回答:1

我有两个使用JERSEY api编写的控制器。我能够很好地运行这两个服务,但我想在同一个ImageApi控制器下加入其中两个,消除SubmitFileController。可以在同一个控制器中使用@Get方法和@POST吗?它将如何处理不同的路径?

目前:server/image/getPictureByIdserver/submitFile(使用帖子)

码:

@Path("/image")
public class ImageApi extends ServiceAPI{   
    @Path("/getPictureById/{imageId}")
    @GET
    @Produces("image/png")
    public Response getPictureById(@PathParam("imageId") String imageId){}

此图像服务从Service API获取上下文:

public class ServiceAPI {
    @Context 
    private ServletContext context;
    public ServletContext getContext() {return context;}
    public void setContext(ServletContext context) {this.context = context;}
}           

@Path("/submitFile")
public class SubmitFileController {

    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadFile(
            @FormDataParam("file") InputStream uploadedInputStream,
            @FormDataParam("file") FormDataContentDisposition fileDetail) {}
java rest
1个回答
1
投票

可以在同一个控制器中使用@Get方法和@POST吗?

它将如何处理不同的路径?

如果在GET方法之上有@Path("/image/getPictureById/"),那么如果注释存在,则/image/getPictureById/会附加到控制器的@Path注释中。因此,除非您将控制器的@Path注释移动到POST方法,否则路径将成为server/submitFile/image/getPictureById/(在这种情况下,您的http API将保持不变)。

注意:如果您愿意,可以在完全相同的路径上处理GET和POST请求(此处似乎不适用)。

public class Controller {
    @Path("/submitFile")
    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadFile(
        @FormDataParam("file") InputStream uploadedInputStream,
        @FormDataParam("file") FormDataContentDisposition fileDetail) {}

    @Path("/image/getPictureById/{imageId}")
    @GET
    @Produces("image/png")
    public Response getPictureById(@PathParam("imageId") String imageId){}
© www.soinside.com 2019 - 2024. All rights reserved.