如何发送一个String参数来休息并转换为json?

时间:2014-11-04 14:06:28

标签: java jax-rs resteasy

我想在有效负载中发送一个字符串,如下所示:

{
  "value":"myvalue"
}

在我的方法中,我将收到一个String值,而不是一个对象。

是否可以重新使用“myvalue”,没有映射?

谢谢!

1 个答案:

答案 0 :(得分:2)

情侣选项

  • 使用JSON Processing API。类似的东西:

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public Response postJson(String json) {
        String value = null;
        try (JsonReader reader = Json.createReader(new StringReader(json))) {
            JsonObject object = reader.readObject();
            JsonValue jsonValue = object.get("value");
            value = jsonValue.toString();
            System.out.println(value);
        }
        return Response.created(newUri).build();
    }
    
  • 创建一个模型类,让JAX-RS框架为您处理绑定。它会将Json读入您的对象并将其写回Json

    @XmlRootElement
    public class Demo {
        // Should be same same as key (or we need annotations)
        private String value;
        public String getValue() { return value; }
        public void setValue(String value) {this.value = value;}
    }
    
    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public Response postJson(Demo demo) {
        System.out.println(demo.getValue());
        return Response.created(newUri).build();
    }
    

更新

看看你的评论,你说你想要只是一个字段。通常,您获取一个表示,并将整个表示返回给服务器。但如果这太麻烦(即大型表示),您可能需要查看PATCH。虽然JAX-RS没有直接支持,但我们可以创建自己的Http方法注释

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@HttpMethod("PATCH")
public @interface PATCH{}

只需使用此方法为您的资源方法注释,您就可以通过PATCH方法发送请求。客户端API请求示例可能类似于

client.target(location).request().method("PATCH",Entity.xml(patchObject));