2015-05-05 69 views
0

我发现下面回答问题弹簧安置Json的问题

Different names of JSON property during serialization and deserialization

不幸的是,当我们使用Spring RESTful Web服务这是行不通的。我不确定什么是严重的问题,但它给了一些字段模糊例外。

我想要做的是序列化和反序列化不同名称的字段名称。

例如,

class Test { 

    private String name; 

    @JsonProperty("myName") 
    public String getName() { 
     return name; 
    } 

    @JsonProperty("yourName") 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

这并不在春季工作休息

+0

总是提供例外。 – beerbajay

回答

1

你不能设置@JsonProperty两个(吸气& setter方法)。您可以设置字段或setter方法。

但是您希望请求和响应的名称不同,请创建两个这样的类。

class StudentResponse{ 
    @JsonProperty(name="student_name) 
    private String name; 

    //getter & setter 

} 

class StudentRequest{ 
    @JsonProperty(name="name) 
    private String name; 

    //getter & setter 

} 
0

Damith是正确的,你似乎不能够标记同一类中的两种方法,但有是解决此问题的方法:

首先,你必须创建一个自定义解串器(或序列化程序,取决于您的偏好)。

我的例子中的物体:

@JsonDeserialize(using = ObjectDeserializer.class) 
public class MyObject { 

private String name; 

public void setName(String name) { 
    this.name = name; 
} 

@JsonProperty("SomeOtherName") 
public String getName() { 
    return name; 
} 
} 

注意,我迎来吸气剂与第一名称的属性。我给这个班定制了一个解串器。它看起来像:

public class ObjectDeserializer extends JsonDeserializer<MyObject> { 


     @Override 
     public MyObject deserialize(JsonParser jp, DeserializationContext ctxt) 
       throws IOException, JsonProcessingException { 

      MyObject object = new MyObject(); 

      JsonNode node = jp.getCodec().readTree(jp); 
      JsonNode jsonNode = node.get("MyCustomSerializeName"); 
      object.setName(jsonNode.getTextValue()); 

      return object; 
     } 

    } 

该类将创建我的自定义对象并获取二传手场描述的名称(而不是依赖于属性名)。

放在一起,我得到:

public class DeserializeTest { 

    public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException { 
     ObjectMapper mapper = new ObjectMapper(); 
     MyObject o = new MyObject(); 
     o.setName("Hello"); 

     String writeValueAsString = mapper.writeValueAsString(o); 
     System.out.println(writeValueAsString); 

     String jsonObj = "{\"MyCustomSerializeName\":\"Other Test\"}"; 

     MyObject readValue = mapper.readValue(jsonObj, MyObject.class); 

     System.out.println(readValue.getName()); 

    } 
} 

而这种输出:

{"SomeOtherName":"Hello"} 
Other Test 

我希望帮助你。