Java 如何在Jersey中为包含或不包含正文的POST请求创建端点
我用Jersey创建了一个API 当前有一个端点,用户可以向该端点发出POST请求。不需要正文,因为所有信息都在url中Java 如何在Jersey中为包含或不包含正文的POST请求创建端点,java,post,jersey,server,jax-rs,Java,Post,Jersey,Server,Jax Rs,我用Jersey创建了一个API 当前有一个端点,用户可以向该端点发出POST请求。不需要正文,因为所有信息都在url中 @POST @Path("entries") @Produces(MEDIATYPE_JSON_AND_XML) public Response createEntry(){ ... } 将创建一个新的空条目并返回id。 请求的内容类型无关紧要,因为并没有请求正文数据 现在还可以在请求期间使用FormData设置新条目的特定字段。对于此请求,需要一个正文,并且内容类
@POST
@Path("entries")
@Produces(MEDIATYPE_JSON_AND_XML)
public Response createEntry(){
...
}
将创建一个新的空条目并返回id。
请求的内容类型无关紧要,因为并没有请求正文数据
现在还可以在请求期间使用FormData设置新条目的特定字段。对于此请求,需要一个正文,并且内容类型必须是多部分/表单数据
所以我创建了第二个函数:
@POST
@Path("entries")
@Consumes("multipart/form-data");
@Produces(MEDIATYPE_JSON_AND_XML)
public Response createEntryWithParam(@FormDataParam('param') String param){
...
}
第二个函数用于发送请求中的参数。但加上它,第一个就停止工作了
发送不带内容类型的请求将引发NullPointerException
。可能是因为@消费
触发了某种内容类型
-检查,但失败了
有没有一种方法可以让一个端点接受包含或不包含请求体的POST请求
编辑以便,我希望在seconds函数中接收所有多部分/表单数据请求,并使用第一个作为对该端点的其他POST请求的一种全面捕获。目前,我有一个解决方案。
如果POST请求没有MediaType(内容类型)或请求正文,我会自动添加一个空JSON对象并相应地设置内容类型
@Provider
public class ContentTypeRequestFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext crc) throws IOException {
if (crc.getMethod().equals("POST") && crc.getMediaType() == null && crc.getLength() == -1){
crc.getHeaders().add("content-type", MediaType.APPLICATION_JSON);
InputStream in = IOUtils.toInputStream("{}");
crc.setEntityStream(in);
}
}
}
这是可行的,但在我看来有点老套。我很想知道是否有更好的方法来达到我想要的结果