Rest Jersey和javax.rs-接受不同的内容类型

Rest Jersey和javax.rs-接受不同的内容类型,rest,post,jersey,javax,Rest,Post,Jersey,Javax,在我的RESTAPI上,我得到了一个POST,除了路径参数之外,它以前不需要任何输入。但是,我现在想通过接受一个可选的表单参数来展开。我在@FormParam上尝试了这一点,但结果表明(至少)一个客户端没有设置内容类型application/x-www-form-urlencoded,Jersey失败了: 当请求实体的内容类型为 不是application/x-www-form-urlencoded 我能解决这个问题吗?我希望允许新客户端以表单形式发送,并且仍然接受旧客户端设置的任何内容类型 一

在我的RESTAPI上,我得到了一个POST,除了路径参数之外,它以前不需要任何输入。但是,我现在想通过接受一个可选的表单参数来展开。我在@FormParam上尝试了这一点,但结果表明(至少)一个客户端没有设置内容类型application/x-www-form-urlencoded,Jersey失败了:

当请求实体的内容类型为 不是application/x-www-form-urlencoded

我能解决这个问题吗?我希望允许新客户端以表单形式发送,并且仍然接受旧客户端设置的任何内容类型

一个糟糕的解决方案是使用查询参数

编辑: 尝试使用单独的@Consumes添加新资源

@POST
@Path("/something")
@Consumes(MediaType.WILDCARD)
public Response thisDoesNotWork(){

在我的测试中,当实际发送表单时,它是有效的。当我不发送内容类型集时,它会失败,错误与上面相同。所以它似乎选择了thisWorks(..)资源

编辑2: 我想出了一个解决办法

@POST
@Path("/something")
@Consumes(MediaType.WILDCARD)
public Response thisDoesNotWork(
   MultivaluedMap<String, String> formParams
){
@POST
@路径(“/某物”)
@使用(MediaType.WILDCARD)
公众反应这不起作用(
多值映射formParams
){

使用此作为唯一的资源,如果未设置内容类型,formParam将为null,如果设置了表单,formParam将包含表单参数。它可能会弄乱文档,但至少可以工作。

“我现在想通过接受可选表单参数来展开”没有可选的东西。它要么是表单参数,要么不是。这不像你可以一起发送JSON和表单参数。我只想创建另一个使用application/x-www-form-urlencoded的资源方法。这是允许的。你可以有两个具有相同HTTP方法和相同路径的方法,只要使用类型或p生产类型是不同的。好吧。问题是,我今天的资源上没有@Consumes,因为不需要主体。所以我想我无法控制我的客户机实际发送的内容。但我会检查一下,我不知道我可以有多个不同消费的资源。客户机似乎不发送内容类型。所以我可以创建一个新的资源资源接受x-www-form-urlencoded,但如何定义必须接受无内容类型请求的资源?一直在尝试一些变体,但没有成功。您能否发布您尝试过的代码。“我现在想通过接受可选的表单参数进行扩展”没有可选的东西。它要么是表单参数,要么不是。这不像你可以一起发送JSON和表单参数。我只想创建另一个使用application/x-www-form-urlencoded的资源方法。这是允许的。你可以有两个具有相同HTTP方法和相同路径的方法,只要使用类型或p生产类型是不同的。好吧。问题是,我今天的资源上没有@Consumes,因为不需要主体。所以我想我无法控制我的客户机实际发送的内容。但我会检查一下,我不知道我可以有多个不同消费的资源。客户机似乎不发送内容类型。所以我可以创建一个新的资源资源接受x-www-form-urlencoded,但如何定义必须接受无内容类型请求的资源?我一直在尝试一些变体,但运气不佳。你能发布你尝试过的代码吗。
@POST
@Path("/something")
@Consumes(MediaType.WILDCARD)
public Response thisDoesNotWork(
   MultivaluedMap<String, String> formParams
){