Java 如何在Pojo中将动态json值映射到HashMap
我使用jax-rs处理器的jackson json成员始终相同,其中只有1个成员具有动态值 此动态值只能是“”或json对象 json可能性1Java 如何在Pojo中将动态json值映射到HashMap,java,json,jackson,jax-rs,Java,Json,Jackson,Jax Rs,我使用jax-rs处理器的jackson json成员始终相同,其中只有1个成员具有动态值 此动态值只能是“”或json对象 json可能性1 { "event":"test", "eventInfo": "" } json可能性2 { "event" : "test", "eventInfo" : { "name" : "abc", "last" : "def" }
{
"event":"test",
"eventInfo": ""
}
json可能性2
{
"event" : "test",
"eventInfo" : {
"name" : "abc",
"last" : "def"
}
}
eventInfo值只能是“”或json
我尝试将这个json映射到MyBean.java
MyBean.java
public class MyBean{
private String event;
private Map<String, String> eventInfo = new HashMap<String, String>();
public String getEvent() {
return event;
}
public void setEvent(String event) {
this.event = event;
}
@JsonAnyGetter
public Map getEventInfo() {
return eventInfo;
}
@JsonAnySetter
public void setEventInfo(String name, String value) {
this.eventInfo.put(name, value);
}
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces("text/plain")
public String receiveClientStatus(MyBean status){
if(!status.getEventInfo().isEmpty()){
String last = status.getEventInfo().get("last").toString() ;
System.err.println( last );
}
return "ok";
}
jackson无法将上面显示的json转换为MyBean.java
如何做到这一点
原谅我的英语
谢谢问题在于MyBean对象的
setEventInfo()
方法。在一种情况下,分配给它的值是空的,在另一种情况下,它被视为一个链接hashmap的字符串。因此,修改参数以接受对象。像
class MyBean {
private String event;
private Map<String, String> eventInfo = new HashMap<String, String>();
public String getEvent() {
return event;
}
public void setEvent(String event) {
this.event = event;
}
@JsonAnyGetter
public Map getEventInfo() {
return eventInfo;
}
@JsonAnySetter
public void setEventInfo(Object eventObject) {
if(eventObject instanceof Map){
this.eventInfo.putAll((Map<String, String>) eventObject);
}
}
@Override
public String toString() {
return "MyBean [event=" + event + ", eventInfo=" + eventInfo + "]";
}
}
问题在于MyBean对象的
setEventInfo()
方法。在一种情况下,分配给它的值是空的,在另一种情况下,它被视为一个链接hashmap的字符串。因此,修改参数以接受对象。像
class MyBean {
private String event;
private Map<String, String> eventInfo = new HashMap<String, String>();
public String getEvent() {
return event;
}
public void setEvent(String event) {
this.event = event;
}
@JsonAnyGetter
public Map getEventInfo() {
return eventInfo;
}
@JsonAnySetter
public void setEventInfo(Object eventObject) {
if(eventObject instanceof Map){
this.eventInfo.putAll((Map<String, String>) eventObject);
}
}
@Override
public String toString() {
return "MyBean [event=" + event + ", eventInfo=" + eventInfo + "]";
}
}
问题在于MyBean对象的
setEventInfo()
方法。在一种情况下,分配给它的值是空的,在另一种情况下,它被视为一个链接hashmap的字符串。因此,修改参数以接受对象。像
class MyBean {
private String event;
private Map<String, String> eventInfo = new HashMap<String, String>();
public String getEvent() {
return event;
}
public void setEvent(String event) {
this.event = event;
}
@JsonAnyGetter
public Map getEventInfo() {
return eventInfo;
}
@JsonAnySetter
public void setEventInfo(Object eventObject) {
if(eventObject instanceof Map){
this.eventInfo.putAll((Map<String, String>) eventObject);
}
}
@Override
public String toString() {
return "MyBean [event=" + event + ", eventInfo=" + eventInfo + "]";
}
}
问题在于MyBean对象的
setEventInfo()
方法。在一种情况下,分配给它的值是空的,在另一种情况下,它被视为一个链接hashmap的字符串。因此,修改参数以接受对象。像
class MyBean {
private String event;
private Map<String, String> eventInfo = new HashMap<String, String>();
public String getEvent() {
return event;
}
public void setEvent(String event) {
this.event = event;
}
@JsonAnyGetter
public Map getEventInfo() {
return eventInfo;
}
@JsonAnySetter
public void setEventInfo(Object eventObject) {
if(eventObject instanceof Map){
this.eventInfo.putAll((Map<String, String>) eventObject);
}
}
@Override
public String toString() {
return "MyBean [event=" + event + ", eventInfo=" + eventInfo + "]";
}
}
setEventInfo方法接受字符串值。它应该是对象吗?@AlexeyGavrilov我已经试过它作为对象了,但它也失败了。MyBean看起来不错。您如何调用receiveClientStatus?从浏览器?@skarist我使用JQuery POST,也使用application/json作为contentType,我认为发送json没有问题,我也在json在线验证中检查我的json。我发送的json与我展示的两个示例类似。我认为问题在于jackson无法将我的json转换为MyBean方法setEventInfo接受字符串值。它应该是对象吗?@AlexeyGavrilov我已经试过它作为对象了,但它也失败了。MyBean看起来不错。您如何调用receiveClientStatus?从浏览器?@skarist我使用JQuery POST,也使用application/json作为contentType,我认为发送json没有问题,我也在json在线验证中检查我的json。我发送的json与我展示的两个示例类似。我认为问题在于jackson无法将我的json转换为MyBean方法setEventInfo接受字符串值。它应该是对象吗?@AlexeyGavrilov我已经试过它作为对象了,但它也失败了。MyBean看起来不错。您如何调用receiveClientStatus?从浏览器?@skarist我使用JQuery POST,也使用application/json作为contentType,我认为发送json没有问题,我也在json在线验证中检查我的json。我发送的json与我展示的两个示例类似。我认为问题在于jackson无法将我的json转换为MyBean方法setEventInfo接受字符串值。它应该是对象吗?@AlexeyGavrilov我已经试过它作为对象了,但它也失败了。MyBean看起来不错。您如何调用receiveClientStatus?从浏览器?@skarist我使用JQuery POST,也使用application/json作为contentType,我认为发送json没有问题,我也在json在线验证中检查我的json。我发送的json与我展示的两个示例类似。我认为问题在于jackson无法将我的json转换为MyBean