प्रौद्योगिकी साझेदारी

स्प्रिंगबूट एनोटेशन--11--@JSONField @JsonProperty

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

युक्तिः - लेखस्य लेखनानन्तरं सामग्रीसूचीं स्वयमेव जनयितुं शक्यते ।

लेख निर्देशिका


एकः प्रश्नः : पृष्ठ-अन्त-सत्ता-वर्गे isXXX इत्यनेन आरभ्यमाणाः विशेषताः अग्र-अन्तं प्रति पारितस्य अनन्तरं स्वयमेव निष्कासिताः भवन्ति ।

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु
अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु
अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु
अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

समाधानं:

  1. उत्पन्नं isReceipt() विधिनाम getIsReceipt() इति परिवर्तयन्तु ।
  2. उत्पन्नं get मेथड् अर्थात् isReceipt इत्यत्र @JsonProperty(value = “isXXX”) एनोटेशनं योजयन्तु ।
 @JsonProperty(value = "isReceipt")
    public boolean isReceipt() {
        return isReceipt;
    }
    @JsonProperty(value = "isExamine")
    public boolean isExamine() {
        return isExamine;
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

@JsonProperty तथा @JSONField

१ परिचयः

  • @JsonProperty तथा @JSONField एनोटेशन्स् कृते सन्तिobj इत्यस्य json स्ट्रिंग् मध्ये परिवर्तयन्ते सति, java bean इत्यस्य विशेषतानाम लक्ष्यविशेषतानामेन प्रतिस्थापयन्तु . तृतीयपक्षस्य अन्तरफलकानां आह्वानसमये यत्र गुणनामानि असङ्गतानि भवन्ति तेषु परिदृश्येषु एतत् सामान्यम् अस्ति ।
  • टिप्पणीद्वयस्य कार्याणि समानानि सन्ति, परन्तु ते भिन्नस्रोतः आगच्छन्ति, भिन्नरूपेण च उपयुज्यन्ते । सादृश्यं भेदं च अधः विस्तरेण व्याख्यास्यते!

2. टिप्पणीनां भेदः

२.१ अन्तर्निहितरूपरेखा भिन्ना अस्ति

  • @JsonProperty इत्येतत् Jackson इत्यनेन कार्यान्वितम् अस्ति
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>版本号</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • @JSONField इत्येतत् fastjson द्वारा कार्यान्वितम् अस्ति
         <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>版本号</version>
        </dependency>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

२.२ भिन्नाः व्याप्तयः

@JSONproperty एनोटेशनस्य उपयोगः भवतिगुणाःउपरि

  • trueName विशेषतां नामरूपेण क्रमाङ्कयितुं, भवान् विशेषतानाम्नि @JsonProperty(value="name") योजयितुं शक्नोति ।

@JSONField एनोटेशनस्य उपयोगः कर्तुं शक्यतेget, set, तथा गुणाःउपरि

  • trueName विशेषतां नाम क्रमेण कर्तुं, भवान् get/set/property name मध्ये @JSONField(value="name") योजयितुं शक्नोति ।

२.३ लाभहानियोः तुलना

  1. @JSONField एनोटेशनस्य उपयोगः सरलः अस्ति ।

  2. @JSONField एनोटेशनं अधिकानि एट्रिब्यूट् मैपिंग विकल्पान् समर्थयति, यथा क्रमाङ्कनस्य समये तिथिस्वरूपं, शून्यमूल्यानि कथं नियन्त्रितव्यानि इत्यादीनि ।

  3. @JSONField एनोटेशनस्य कार्यक्षमता द्रुततरं भवति यतोहि fastjson स्वयं उच्च-प्रदर्शन-JSON-प्रक्रिया-पुस्तकालयः अस्ति

  4. Jackson framework इत्यस्य उपयोगं कुर्वन्, भवान् केवलं @JsonProperty एनोटेशनस्य उपयोगं कर्तुं शक्नोति तथा च @JSONField एनोटेशनस्य उपयोगं कर्तुं न शक्नोति ।

@ JsonProperty

यदि भवान् नूतनस्य उपयोगं करोतिspringboot परियोजना, पूर्वनिर्धारितं Jackson serialization अस्ति, केवलं गुणानाम् उपरि प्रत्यक्षतया टिप्पणीनां उपयोगं कुर्वन्तु ।

1. आश्रयः

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>版本号</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • @JsonProperty एनोटेशनं jackson संकुलात् आगच्छति तथा च एण्टिटी क्लास् json स्ट्रिंग् मध्ये परिवर्तयितुं ObjectMapper().writeValueAsString (entity class) मेथड् इत्यनेन सह उपयुज्यते ।
  • json स्ट्रिंग् इत्येतत् एण्टी क्लास् मध्ये परिवर्तयितुं ObjectMapper().readValue(string) मेथड् इत्यनेन सह उपयुज्यते ।

2. json string तथा bean object इत्येतयोः मध्ये परिवर्तनस्य परीक्षणं कुर्वन्तु

सत्तावर्गः User.java

import com.fasterxml.jackson.annotation.JsonProperty;
 
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
	@JsonProperty("JsonPropertyName")
	private String name;
	private String sex;
	private Integer age;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

परीक्षणविधयः : १.

@Test
public void testJsonProperty() throws IOException{
    //bean ---> json
	User user=new User("zhangsan","man",22);
	
	System.out.println(new ObjectMapper().writeValueAsString(user));
	

    //json ---> bean
	String str="{"sex":"man","age":22,"JsonPropertyName":"zhangsan"}";
	
	System.out.println(new ObjectMapper().readValue(str, User.class).toString());
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

परीक्षाफलम् : १.

{"sex":"man","age":22,"JsonPropertyName":"zhangsan"}
User [name=zhangsan, sex=man, age=22]
  • 1
  • 2
  • द्रष्टुं शक्यते यत् बीन् json स्ट्रिंग् मध्ये परिवर्तितस्य अनन्तरं @JsonProperty इत्यनेन एनोटेटेड् बीन् गुणनाम निर्दिष्टेन गुणनाम्ना प्रतिस्थापितम् अस्ति: JsonPropertyName;

  • json स्ट्रिंग् इत्यस्य बीन् मध्ये परिवर्तनस्य अनन्तरं @JsonProperty एनोटेशनेन निर्दिष्टं गुणनाम bean गुणनाम्ना प्रतिस्थापितम् अस्ति: name;

@ JSONक्षेत्रम्

1. आश्रयः

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>版本号</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • @JSONField fastjson संकुलस्य मध्ये स्थितम् अस्ति तथा च एण्टी क्लास्स् json स्ट्रिंग् मध्ये परिवर्तयितुं JSON.toJSONString (entity class) मेथड् इत्यनेन सह उपयुज्यते ।
  • json स्ट्रिंग् इत्येतत् एण्टी क्लास् मध्ये परिवर्तयितुं JSON.parseObject(string, entity class.class) मेथड् इत्यनेन सह तस्य उपयोगं कुर्वन्तु ।

2. json string तथा bean object इत्येतयोः मध्ये परिवर्तनस्य परीक्षणं कुर्वन्तु

सत्तावर्गः User.java

import com.alibaba.fastjson.annotation.JSONField;
 
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
	@JSONField(name="JSONFieldName")
	private String name;
	private String sex;
	private Integer age;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

परीक्षणविधयः : १.

@Test
public void testSONField(){
    //bean ---> json
	User user=new User("zhangsan","man",22);
	System.out.println(JSON.toJSONString(user));
	
    //json ---> bean
	String str="{"JSONFieldName":"zhangsan","age":22,"sex":"man"}";
	System.out.println(JSON.parseObject(str, User.class).toString());	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

परीक्षाफलम् : १.

{"JSONFieldName":"zhangsan","age":22,"sex":"man"}
User [name=zhangsan, sex=man, age=22]
  • 1
  • 2
  1. द्रष्टुं शक्यते यत् बीन् json स्ट्रिंग् मध्ये परिवर्तितस्य अनन्तरं @JSONField एनोटेशनस्य बीन् विशेषतानाम निर्दिष्टेन विशेषतानाम्ना प्रतिस्थापितम् अस्ति: JSONFieldName
  2. json स्ट्रिंग् इत्यस्य बीन् मध्ये परिवर्तनस्य अनन्तरं @JSONField एनोटेशनेन निर्दिष्टं विशेषतानाम बीन् विशेषतानाम्ना प्रतिस्थापितम् अस्ति: name;
  3. परीक्षणस्य परिणामाः @JsonProperty इत्यस्य समानाः सन्ति ।

3.format विशेषता

प्रारूपविशेषणस्य उपयोगः तिथिप्रकारस्य विशेषतानां प्रारूपं निर्दिष्टुं तथा च संख्यात्मकप्रकारानाम् स्ट्रिंग् प्रकारेषु परिवर्तनस्य प्रारूपं निर्दिष्टुं शक्यते ।

public class User {
    private String name;
    private int age;
    @JSONField(format = "yyyy-MM-dd")
    private Date birthday;
    @JSONField(format = "#,###.00")
    private double salary;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • उपर्युक्ते उदाहरणे, @JSONField एनोटेशनस्य उपयोगः जन्मदिनस्य विशेषतायाः तिथिस्वरूपं "yyyy-MM-dd" इति निर्दिष्टुं भवति ।
  • वेतनविशेषणस्य संख्यास्वरूपं "#,###.00" अस्ति ।

4. विशेषतां क्रमबद्धं कुर्वन्तु

  • भवन्तः serialize विशेषतायाः माध्यमेन विशेषताः JSON वस्तुषु क्रमबद्धाः सन्ति वा इति नियन्त्रयितुं शक्नुवन्ति ।
  • यदा serialize विशेषता मिथ्या भवति तदा गुणाः JSON ऑब्जेक्ट् मध्ये क्रमबद्धाः न भविष्यन्ति ।
public class User {
    @JSONField(serialize = false)
    private int userId;
    private String name;
    private int age;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

उपर्युक्ते उदाहरणे, @JSONField एनोटेशनस्य उपयोगेन userId विशेषता क्रमाङ्कनात् बहिष्कृता अस्ति

5.deserialize विशेषता

  • JSON ऑब्जेक्ट् मध्ये गुणाः Java ऑब्जेक्ट्स् मध्ये deserialized भवन्ति वा इति नियन्त्रयितुं deserialize विशेषतायाः उपयोगः कर्तुं शक्यते ।
  • यदा deserialize विशेषता मिथ्या भवति तदा एतत् विशेषता JSON ऑब्जेक्ट् तः Java ऑब्जेक्ट् मध्ये deserialized न भविष्यति ।
public class User {
    private int userId;
    private String name;
    @JSONField(deserialize = false)
    private int age;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

उपर्युक्ते उदाहरणे, @JSONField एनोटेशनस्य उपयोगेन age गुणः विक्रमीकरणात् बहिष्कृतः अस्ति

6.साधारणविशेषणम्

गुणानाम् क्रमः क्रमिकविशेषणद्वारा निर्दिष्टुं शक्यते

  • पूर्वनिर्धारितरूपेण, गुणानाम् क्रमः जावा ऑब्जेक्ट् इत्यस्मिन् गुणाः यस्मिन् क्रमे दृश्यन्ते तस्य आधारेण भवति ।
public class User {
    @JSONField(ordinal = 2)
    private String name;
    @JSONField(ordinal = 1)
    private int age;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

उपर्युक्ते उदाहरणे, @JSONField एनोटेशनस्य उपयोगः age एट्रिब्यूट् इत्यस्य क्रमं 1 इति निर्दिष्टुं भवति तथा च name एट्रिब्यूट् इत्यस्य क्रमं 2 इति निर्दिष्टुं भवति ।

7.defaultValue विशेषता

defaultValue एट्रिब्यूट् इत्यस्य उपयोगः Java ऑब्जेक्ट् इत्यस्मिन् एट्रिब्यूट् इत्यस्य पूर्वनिर्धारितमूल्यं निर्दिष्टुं शक्यते ।

public class User {
    @JSONField(defaultValue = "0")
    private int userId;
    @JSONField(defaultValue = "N/A")
    private String name;
    private int age;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

उपरिष्टाद् उदाहरणे @JSONField एनोटेशनस्य उपयोगः भवति यत् userId विशेषतायाः पूर्वनिर्धारितं मूल्यं 0 अस्ति तथा च name विशेषतायाः पूर्वनिर्धारितं मूल्यं "N/A" इति निर्दिष्टुं भवति ।

8. प्रकारविशेषणम्

  • विशेषतायाः प्रकारः प्रकारविशेषणद्वारा निर्दिष्टुं शक्यते
public class User {
    private int userId;
    @JSONField(type = FieldType.STRING)
    private int age;
}
  • 1
  • 2
  • 3
  • 4
  • 5

उपरिष्टाद् उदाहरणे, @JSONField एनोटेशनस्य उपयोगः age एट्रिब्यूट् इत्यस्य प्रकारं स्ट्रिंग् प्रकाररूपेण निर्दिष्टुं भवति ।