के साथ कक्षा को deserializing मेरे पास एक निजी निर्माता और एक स्थिर कारखाने के साथ एक साधारण वर्ग है। मैं वर्ग को एक संख्या के रूप में क्रमबद्ध करना चाहता हूं, इसलिए मैंने @JsonValue
के साथ फ़ील्ड के लिए गेटर को एनोटेट किया है। हालांकि, जैक्सन स्थिर फैक्ट्री पर निजी कन्स्ट्रक्टर पसंद करते हैं, भले ही मैं स्थिर कारखाने को @JsonCreator
के साथ एनोटेट करता हूं। यह काम करता है अगर मैं @JsonIgnore
के साथ निजी कन्स्ट्रक्टर को एनोटेट करता हूं, लेकिन यह थोड़ा सा लगता है।जैक्सन @ जेसन क्रिएटर पर निजी कन्स्ट्रक्टर पसंद करता है जब @JsonValue
मैंने कुछ पोस्टों को दावा किया है कि @JsonCreator
केवल तभी काम करता है जब पैरामीटर @JsonProperty
के साथ एनोटेटेड होते हैं; हालांकि, ऐसा लगता है कि JSON ऑब्जेक्ट्स के रूप में क्रमबद्ध वस्तुओं के मामले में ऐसा लगता है। इस वस्तु को एक संख्या के रूप में क्रमबद्ध किया जा रहा है, और इस प्रकार एनोटेशन को आपूर्ति करने के लिए कोई संपत्ति नहीं है।
क्या मुझे कुछ याद आ रही है?
उदाहरण वर्ग:
package com.example;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import com.google.common.base.Preconditions;
public class NonNegative {
private final double n;
private NonNegative(double n) {
this.n = n;
}
@JsonCreator
public static NonNegative checked(double n) {
Preconditions.checkArgument(n >= 0.0);
return new NonNegative(n);
}
@JsonValue
public double getValue() {
return n;
}
@Override
public int hashCode() {
return Objects.hash(n);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof NonNegative) {
NonNegative that = (NonNegative) obj;
return Objects.equals(n, that.n);
}
return false;
}
}
उदाहरण परीक्षण:
package com.example;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Test;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class NonNegativeTest {
private static final ObjectMapper MAPPER = new ObjectMapper();
@Test
public void itSerializesAndDeserializes() throws Exception {
NonNegative nonNegative = NonNegative.checked(0.5);
assertThat(MAPPER.readValue(MAPPER.writeValueAsString(nonNegative), NonNegative.class)).isEqualTo(nonNegative);
}
/* This test fails. */
@Test(expected = JsonMappingException.class)
public void itDoesNotDeserializeANegativeNumber() throws Exception {
MAPPER.readValue(MAPPER.writeValueAsString(-0.5), NonNegative.class);
}
}
क्या आपने @JsonProperty के साथ चेक की गई विधि के तर्क की टिप्पणी करने का प्रयास किया है? – wastl
मेरे पास है। यह मदद नहीं की। – NickAldwin
[शायद प्रासंगिक] (https://github.com/FasterXML/jackson- मॉड्यूल-paranamer/issues/11)। –