Java 如何在Jersey中为包含或不包含正文的POST请求创建端点

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设置新条目的特定字段。对于此请求,需要一个正文,并且内容类

我用Jersey创建了一个API

当前有一个端点,用户可以向该端点发出POST请求。不需要正文,因为所有信息都在url中

@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);
        }
    }
}
这是可行的,但在我看来有点老套。我很想知道是否有更好的方法来达到我想要的结果