我有两个使用JERSEY api编写的控制器。我能够很好地运行这两个服务,但我想在同一个ImageApi控制器下加入其中两个,消除SubmitFileController。可以在同一个控制器中使用@Get方法和@POST吗?它将如何处理不同的路径?
目前为:server/image/getPictureById
和server/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) {}
答案 0 :(得分:1)
是否可以在同一个控制器中使用@Get方法和@POST?
是
它将如何处理不同的路径?
如果您在GET方法之上@Path("/image/getPictureById/")
,那么/image/getPictureById/
会附加到控制器的@Path注释中(如果注释存在)。因此,路径将变为server/submitFile/image/getPictureById/
,除非您将控制器的@Path注释移动到POST方法(在这种情况下,您的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){}