Java 在POST请求体中接受JSON对象而不使用getter和setter方法,这是可能的吗?

Java 在POST请求体中接受JSON对象而不使用getter和setter方法,这是可能的吗?,java,json,rest,jax-rs,dropwizard,Java,Json,Rest,Jax Rs,Dropwizard,我需要接受POST请求主体中的JSON数据。在不为JSON对象中的所有键定义getter和setter方法的情况下,是否可以接受POST方法主体中存在的所有输入JSON数据 @POST @Path("/post") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public postData GiveData(final postData output) { return outpu

我需要接受POST请求主体中的JSON数据。在不为JSON对象中的所有键定义getter和setter方法的情况下,是否可以接受POST方法主体中存在的所有输入JSON数据

@POST
@Path("/post")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public postData GiveData(final postData output) {
    return output;
}
我的Get和Set方法:

public class TestClass {

   @JsonProperty("Type")
    public String getType() {
            return Type;
    }

    public void setType(String Type) {
            this.Type = Type;
    }
}
如果JSON输入为

{
  Type : "Test"
}

 Returns 200 :
{
  "Type" : "Test" ,
  "Random-KeY" : "Value" 
} 

 Returns 400 : Unable to Process JSON data
但是如果JSON输入是

{
  Type : "Test"
}

 Returns 200 :
{
  "Type" : "Test" ,
  "Random-KeY" : "Value" 
} 

 Returns 400 : Unable to Process JSON data
我的问题是,我需要在无法预期传入JSON键的情况下接受数据,因此我无法为所有键编写get和set方法,因此我如何接受POST方法体中的所有JSON对象。
有什么建议可以帮我吗?

你可以用

@JsonIgnoreProperties(ignoreUnknown = true)

这将只映射类中的现有字段,并忽略其余字段。

您可以使用

@JsonIgnoreProperties(ignoreUnknown = true)

这将只映射类中现有的字段,而忽略剩余的字段。

由于json数据中有未知的键/值,我建议对requestbody使用HashMap,它将提供您想要的内容(即没有getter、setter和accept未知值),如下所示:

@POST
@Path("/post")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public postData GiveData(@RequestBody HashMap<String, Object> dataHashMap) {
       //access the values by their keynames. You know how to get keySet of hashMap and  
       // iterate over them(I guess)
        return output;
    }
@POST
@路径(“/post”)
@产生(MediaType.APPLICATION_JSON)
@使用(MediaType.APPLICATION_JSON)
public postData GiveData(@RequestBody HashMap dataHashMap){
//通过键名访问值。您知道如何获取hashMap和
//迭代它们(我猜)
返回输出;
}

希望这能起作用。

由于您的json数据中有未知的键/值,我建议使用requestbody的HashMap,它将提供您想要的内容(即没有getter、setter和accept未知值),如下所示:

@POST
@Path("/post")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public postData GiveData(@RequestBody HashMap<String, Object> dataHashMap) {
       //access the values by their keynames. You know how to get keySet of hashMap and  
       // iterate over them(I guess)
        return output;
    }
@POST
@路径(“/post”)
@产生(MediaType.APPLICATION_JSON)
@使用(MediaType.APPLICATION_JSON)
public postData GiveData(@RequestBody HashMap dataHashMap){
//通过键名访问值。您知道如何获取hashMap和
//迭代它们(我猜)
返回输出;
}

希望这能奏效。

@John,你能澄清一下你的要求吗?如果您想要接受json对象的所有数据,但不想声明
getters setter
,那么只需要字段名?或者你想把它们都排除在外?我想如果这就是我所说的,那么就不可能接受,因为你必须映射这些键来获得一个特定字段的值,因此声明你将要获得的字段。如果是这样,请检查我的答案helps@John,你能澄清你的要求吗?如果您想要接受json对象的所有数据,但不想声明
getters setter
,那么只需要字段名?或者你想把它们都排除在外?我想如果这就是我所说的,那么就不可能接受,因为你必须映射这些键来获得一个特定字段的值,因此声明你将要获得的字段。如果有帮助,请检查我的答案