1

在我的 REST API 上,我有一个 POST,它以前不需要来自路径参数的任何输入。但是,我现在想通过接受可选的表单参数来扩展。我用@FormParam 进行了尝试,但事实证明(至少)其中一个客户端没有设置内容类型 application/x-www-form-urlencoded,而 Jersey 失败了:

当请求实体的内容类型不是 application/x-www-form-urlencoded 时使用@FormParam

我可以解决这个问题吗?我想允许新客户发送表单并仍然接受旧客户设置的任何内容类型。

一个不好的解决方案是使用查询参数。

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

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

@POST
@Path("/something")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response thisWorks(@FormParam("input") String input){

在我的测试中,当实际发送表单时,它可以工作。当我不发送设置内容类型时,它会失败并出现与上述相同的错误。所以它似乎选择了 thisWorks(..) 资源。

Edit2:我想出了一个解决方法

@POST
@Path("/something")
@Consumes(MediaType.WILDCARD)
public Response thisDoesNotWork(
   MultivaluedMap<String, String> formParams
){

使用它作为唯一资源,如果没有设置内容类型,formParam 将为空,如果设置了表单,则将包含表单参数。它可能会弄乱文档,但至少它会起作用。

4

0 回答 0