Java 在POST请求体中接受JSON对象而不使用getter和setter方法,这是可能的吗?
我需要接受POST请求主体中的JSON数据。在不为JSON对象中的所有键定义getter和setter方法的情况下,是否可以接受POST方法主体中存在的所有输入JSON数据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
@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
,那么只需要字段名?或者你想把它们都排除在外?我想如果这就是我所说的,那么就不可能接受,因为你必须映射这些键来获得一个特定字段的值,因此声明你将要获得的字段。如果有帮助,请检查我的答案