使用自定义对象而不是@FormParam作为JAX-RS资源输入

时间:2014-09-02 11:57:43

标签: java jersey jax-rs

我有一个示例代码:

@PUT
public String method(@FormParam("firstName") String firstName, 
                     @FormParam("lastName") String lastName ) {
    Person person = new Person(firstName, lastName);
    // ...
}

我想停止使用@FormParams并改为使用Person:

@PUT
public String method(@Person person) {
    // ...
}

最好的方法是什么?

我正在尝试使用自定义BodyReader,但我必须在readFrom方法中“手动”解析InputStream。

这是正确的方法吗?如果是,将InputStream转换为KEY =>的最佳方法是什么? VALUE HashMap?

2 个答案:

答案 0 :(得分:5)

答案 1 :(得分:3)

您有两种选择:

  1. 可能您只在该方法中传输单个实体实例,在这种情况下,您可以简单地避免使用任何JAX-RS注释注释person参数。在JAX-RS规范中,这称为实体参数,REST方法中必须有一个这样的参数,然后由注册的实体提供者自动解码。
  2. 更改您的Person类,使其构造函数接收单个String作为参数,并接收构造函数中的解码。摘自here

      

    通常,方法参数的Java类型可以是:

         
        
    • 是原始类型; - 有一个接受单个的构造函数   字符串参数;

    •   
    • 有一个名为valueOf或fromString的静态方法,它接受一个String参数(例如,参见Integer.valueOf(String)和   java.util.UUID.fromString(字符串));

    •   
    • 有一个javax.ws.rs.ext.ParamConverterProvider JAX-RS扩展SPI的注册实现   返回一个能够来自"的javax.ws.rs.ext.ParamConverter实例   字符串"转换类型。或

    •   
    • Be List,Set或SortedSet,其中T满足上面的2或3。生成的集合是只读的。

    •