logo

Напомене о серијализацији у Јацксону

Сериализатион напомене се користе када сериализујемо Јава објекте у Јсон стринг. Џексонова библиотека пружа неколико напомена о серијализацији као што су @ЈсонСериализе, @ЈацксонГеттер, @ЈсонАниГеттер , итд.

Напомене о серијализацији у Јацксону

Хајде да разумемо сваки од њих један по један на примеру.

@ЈсонАниГеттер

@ЈсонАниГеттер је једна од најважнијих напомена која се користи за серијализацију ЈСОН-ових додатних својстава на исти начин на који су друга својства серијализована. Анотација дозвољава методу геттера за враћање мапе коју смо затим користили за серијализацију. ЈсонАниГеттер анотација се користи за серијализацију, што значи да долази у категорију Белешка о серијализацији .

Узмимо два примера да бисмо разумели @ЈсонАниГеттер Анотација. У првом примеру, конвертоваћемо Јава објекат у ЈСОН без употребе напомена. У другом примеру, то радимо коришћењем напомене да бисмо разумели употребу @ЈсонАниГеттер напомене.

ЈсонАниГеттерЕкампле1.јава

 // import required classes and package import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Scanner; import com.fasterxml.jackson.databind.ObjectMapper; // create class JsonAnyGetterExample1 public class JsonAnyGetterExample1 { // main() method start public static void main(String args[]){ // create instance of ObjectMapper class ObjectMapper mapper = new ObjectMapper(); // create Scanner class object Scanner sc= new Scanner(System.in); try{ Faculty faculty = new Faculty(); String facId, facname, facEmail; System.out.println('Enter Faculty Id:'); facId = sc.nextLine(); faculty.add('Id', facId); System.out.println('Enter Faculty Name'); facname = sc.nextLine(); faculty.add('Name', facname); System.out.println('Enter Faculty Email'); facEmail = sc.nextLine(); faculty.add('Email', facEmail); // convert Java type into Json string String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(faculty); System.out.println(jsonString); } catch (IOException e) { e.printStackTrace(); } // close Scanner class object sc.close(); } } class Faculty { private Map facultyData; public Faculty(){ facultyData = new HashMap(); } public Map getFacultyData(){ return facultyData; } public void add(String key, String value){ facultyData.put(key, value); } } 

Излаз:

стринг то итн
Напомене о серијализацији у Јацксону

ЈсонАниГеттерЕкампле2.јава

 // import required classes and package import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Scanner; import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.databind.ObjectMapper; // create class JsonAnyGetterExample2 to understand use of @JsonAnyGetter public class JsonAnyGetterExample2 { // main() method start public static void main(String args[]){ // create instance of ObjectMapper class ObjectMapper mapper = new ObjectMapper(); // create Scanner class object Scanner sc= new Scanner(System.in); try{ Faculty faculty = new Faculty(); String facId, facname, facEmail; System.out.println('Enter Faculty Id:'); facId = sc.nextLine(); faculty.add('Id', facId); System.out.println('Enter Faculty Name'); facname = sc.nextLine(); faculty.add('Name', facname); System.out.println('Enter Faculty Email'); facEmail = sc.nextLine(); faculty.add('Email', facEmail); // convert Java type into Json string String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(faculty); System.out.println(jsonString); } catch (IOException e) { e.printStackTrace(); } // close Scanner class object sc.close(); } } class Faculty { private Map facultyData; public Faculty(){ facultyData = new HashMap(); } @JsonAnyGetter public Map getFacultyData(){ return facultyData; } public void add(String key, String value){ facultyData.put(key, value); } } 

Излаз:

Напомене о серијализацији у Јацксону

Објашњење:

Излаз долази са а фацултиДата заглавље у првом примеру јер не користимо напомену @ЈсонАниГеттер. У другом примеру, излаз долази само са вредностима Ид, Наме и Емаил. У излазу нема заглавља фацултиДата јер ми користимо @ЈсонАниГеттер напомена тамо.

@ЈсонГеттер

@ЈсонГеттер је још једна најважнија напомена која се користи за серијализацију ЈСОН-ових додатних својстава. Слично је напомени @ЈсонПроперти која омогућава да се одређени метод означи као метод за добијање. @ЈсонГеттер анотација се такође користи за серијализацију, тако да долази Белешка о серијализацији .

за басх петље

Узмимо два примера да бисмо разумели @ЈсонГеттер Анотација. У првом примеру, конвертоваћемо Јава објекат у ЈСОН без употребе напомена. У другом примеру, то радимо коришћењем напомене да бисмо разумели употребу @ЈсонГеттер напомене.

ЈсонГеттерЕкампле1.јава

 //import required classes and package import java.io.IOException; import java.util.Scanner; import com.fasterxml.jackson.databind.ObjectMapper; //create class JsonGetterExample1 public class JsonGetterExample1 { // main() method start public static void main(String args[]){ // create instance of ObjectMapper class ObjectMapper mapper = new ObjectMapper(); // create Scanner class object Scanner sc= new Scanner(System.in); try{ String facId, facName, facEmail; System.out.println('Enter Faculty Id:'); facId = sc.nextLine(); System.out.println('Enter Faculty Name'); facName = sc.nextLine(); System.out.println('Enter Faculty Email'); facEmail = sc.nextLine(); FacultyNew faculty = new FacultyNew(facId, facName, facEmail); // convert Java type into Json string String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(faculty); System.out.println(jsonString); } catch (IOException e) { e.printStackTrace(); } // close Scanner class object sc.close(); } } class FacultyNew { private String facId; private String facName; private String facEmail; public FacultyNew(String id, String name, String email){ facId = id; facName = name; facEmail = email; } public String getId(){ return facId; } public String getName(){ return facName; } public String getEmail(){ return facEmail; } } 

Излаз:

Напомене о серијализацији у Јацксону

ЈсонГеттерЕкампле2.јава

 //import required classes and package import java.io.IOException; import java.util.Scanner; import com.fasterxml.jackson.annotation.JsonGetter; import com.fasterxml.jackson.databind.ObjectMapper; //create class JsonGetterExample2 to understand the JsonGetter annotation public class JsonGetterExample2 { // main() method start public static void main(String args[]){ // create instance of ObjectMapper class ObjectMapper mapper = new ObjectMapper(); // create Scanner class object Scanner sc= new Scanner(System.in); try{ String facId, facName, facEmail; System.out.println('Enter Faculty Id:'); facId = sc.nextLine(); System.out.println('Enter Faculty Name'); facName = sc.nextLine(); System.out.println('Enter Faculty Email'); facEmail = sc.nextLine(); FacultyNew faculty = new FacultyNew(facId, facName, facEmail); // convert Java type into Json string String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(faculty); System.out.println(jsonString); } catch (IOException e) { e.printStackTrace(); } // close Scanner class object sc.close(); } } class FacultyNew { private String id; private String name; private String email; public FacultyNew(String id, String name, String email){ this.id = id; this.name = name; this.email = email; } public String getFacultyId(){ return id; } @JsonGetter('name') public String getFacultyName(){ return name; } public String getFacultyEmail(){ return email; } } 

Излаз:

Напомене о серијализацији у Јацксону

Објашњење

У првом примеру, свако име променљиве почиње префиксом факултета јер не користимо напомену @ЈсонГеттер. Имена променљивих почињу без вредности префикса(факултета) у другом примеру.

@ЈсонПропертиОрдер

@ЈсонПропертиОрдер је још једна важна Џексонова белешка. Користи се за очување одређеног редоследа приликом серијализације ЈСОН објекта. Такође се користи за серијализацију, тако да такође долази Белешка о серијализацији .

Узмимо два примера да бисмо разумели @ЈсонПропертиОрдер Анотација. Логика и функционалност оба кода су сличне. Једина разлика између њих је у томе што у првом коду не користимо @ЈсонПропертиОрдер, а у другом га користимо.

ЈсонПропертиОрдерЕкампле1.јава

величина текста латекса
 import java.io.IOException; import java.util.Scanner; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; // create JsonPropertyOrderExample1 class to convert Java Object into JSON public class JsonPropertyOrderExample1 { // main() method start public static void main(String args[]){ // create instance of the ObjectSerialization class ObjectMapper obj = new ObjectMapper(); Scanner sc1 = new Scanner(System.in); try { Product prod = new Product(); String prodId, prodName, price; System.out.println('Enter Product Id:'); prodId = sc1.nextLine(); prod.setProId(prodId); System.out.println('Enter Product Name'); prodName = sc1.nextLine(); prod.setProName(prodName); System.out.println('Enter Product Price:'); price = sc1.nextLine(); prod.setPrice(price); String jsonString = obj .writerWithDefaultPrettyPrinter() .writeValueAsString(prod); System.out.println(jsonString); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // close scanner class object sc1.close(); } } class Product { //Creating properties of Product class private String proId; private String name; private String price; //Getter and Setters public String getProId() { return proId; } public void setProId(String proId) { this.proId = proId; } public String getName() { return name; } public void setProName(String name) { this.name = name; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } @Override public String toString() { // TODO Auto-generated method stub return ''Product [ProductId '+ proId + ', ProductName = ' + name + ', ProductPrice = ' + price + ']'; } } 

Излаз:

Напомене о серијализацији у Јацксону

ЈсонПропертиОрдерЕкампле2.јава

 import java.io.IOException; import java.util.Scanner; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; // create JsonPropertyOrderExample1 class to convert Java Object into JSON public class JsonPropertyOrderExample1 { // main() method start public static void main(String args[]){ // create instance of the ObjectSerialization class ObjectMapper obj = new ObjectMapper(); Scanner sc1 = new Scanner(System.in); try { Product prod = new Product(); String prodId, prodName, price; System.out.println('Enter Product Id:'); prodId = sc1.nextLine(); prod.setProId(prodId); System.out.println('Enter Product Name'); prodName = sc1.nextLine(); prod.setProName(prodName); System.out.println('Enter Product Price:'); price = sc1.nextLine(); prod.setPrice(price); String jsonString = obj .writerWithDefaultPrettyPrinter() .writeValueAsString(prod); System.out.println(jsonString); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // close scanner class object sc1.close(); } } @JsonPropertyOrder({'name', 'proId'}) class Product { //Creating properties of Product class private String proId; private String name; private String price; //Getter and Setters public String getProId() { return proId; } public void setProId(String proId) { this.proId = proId; } public String getName() { return name; } public void setProName(String name) { this.name = name; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } @Override public String toString() { // TODO Auto-generated method stub return ''Product [ProductId '+ proId + ', ProductName = ' + name + ', ProductPrice = ' + price + ']'; } } 

Излаз:

Напомене о серијализацији у Јацксону

Објашњење

У првом примеру, излаз долази са подразумеваним редоследом поља јер их не користимо @ЈсонПропертиОрдер . У другом примеру, излаз долази са редоследом поља у којима дефинишемо @ЈсонПропертиОрдер . Дакле, ЈсонПропртиОрдер напомена се користи за добијање поља резултата у наведеном редоследу.

@ЈсонРавВалуе

@ЈсонРавВалуе је још једна важна Џексонова белешка која се користи у серијализацији објекта. Користи се за серијализацију текста без бежања или без икаквог украса. Такође долази Белешка о серијализацији с.

Узмимо примере да бисмо разумели употребу @ЈсонРавВалуе напомена у којој пишемо код са и без @ЈсонРавВалуе Анотација.

наплата у гит-у

ЈсонРавВалуеЕкампле1.јава

 import java.io.IOException; import java.util.Scanner; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; // create JsonRawValueExample1 class to convert Java Object into JSON public class JsonRawValueExample1 { // main() method start public static void main(String args[]){ // create instance of the ObjectSerialization class ObjectMapper obj = new ObjectMapper(); Scanner sc1 = new Scanner(System.in); try { Product prod = new Product(); String prodId, prodName, price; System.out.println('Enter Product Id:'); prodId = sc1.nextLine(); prod.setProId(prodId); System.out.println('Enter Product Name'); prodName = sc1.nextLine(); prod.setProName(prodName); System.out.println('Enter Product Price:'); price = sc1.nextLine(); prod.setPrice(price); prod.setJson('{'attr':false}'); String jsonString = obj .writerWithDefaultPrettyPrinter() .writeValueAsString(prod); System.out.println(jsonString); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // close scanner class object sc1.close(); } } class Product { //Creating properties of Product class private String proId; private String name; private String price; private String json; //Getter and Setters public String getProId() { return proId; } public void setProId(String proId) { this.proId = proId; } public String getName() { return name; } public void setProName(String name) { this.name = name; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } public String getJson() { return json; } public void setJson(String json) { this.json = json; } @Override public String toString() { // TODO Auto-generated method stub return ''Product [ProductId '+ proId + ', ProductName = ' + name + ', ProductPrice = ' + price + ']'; } } 

Излаз:

Напомене о серијализацији у Јацксону

ЈсонРавВалуеЕкампле2.јава

 import java.io.IOException; import java.util.Scanner; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.annotation.JsonRawValue; // create JsonRawValueExample2 class to convert Java Object into JSON public class JsonRawValueExample2 { // main() method start public static void main(String args[]){ // create instance of the ObjectSerialization class ObjectMapper obj = new ObjectMapper(); Scanner sc1 = new Scanner(System.in); try { Product prod = new Product(); String prodId, prodName, price; System.out.println('Enter Product Id:'); prodId = sc1.nextLine(); prod.setProId(prodId); System.out.println('Enter Product Name'); prodName = sc1.nextLine(); prod.setProName(prodName); System.out.println('Enter Product Price:'); price = sc1.nextLine(); prod.setPrice(price); prod.setJson('{'attr':false}'); String jsonString = obj .writerWithDefaultPrettyPrinter() .writeValueAsString(prod); System.out.println(jsonString); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // close scanner class object sc1.close(); } } class Product { //Creating properties of Product class private String proId; private String name; private String price; @JsonRawValue private String json; //Getter and Setters public String getProId() { return proId; } public void setProId(String proId) { this.proId = proId; } public String getName() { return name; } public void setProName(String name) { this.name = name; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } public String getJson() { return json; } public void setJson(String json) { this.json = json; } @Override public String toString() { // TODO Auto-generated method stub return ''Product [ProductId '+ proId + ', ProductName = ' + name + ', ProductPrice = ' + price + ']'; } } 

Излаз:

Напомене о серијализацији у Јацксону

Објашњење

У првом примеру, вредност јсон поља долази са декорацијом јер не користимо @ЈсонРавВалуе Анотација. Док, у другом примеру, вредност јсон поља долази без избегавања или декорације јер користимо @ЈсонРавВалуе Анотација. Дакле, вредности долазе без косе црте (/).

@ЈсонВалуе

@ЈсонВалуе је једна од најчешће коришћених и најважнијих напомена која се користи за серијализацију једног објекта коришћењем његовог јединственог метода.

Узмимо пример да разумемо како се напомена користи за серијализацију објекта:

ЈсонВалуеЕкампле1.јава

 import java.io.IOException; import java.util.Scanner; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.annotation.JsonValue; // create JsonValueExample class to serialize an object using its single method public class JsonValueExample { // main() method start public static void main(String args[]){ // create instance of the ObjectSerialization class ObjectMapper obj = new ObjectMapper(); Scanner sc1 = new Scanner(System.in); try { Product prod = new Product(); String prodId, prodName, price; System.out.println('Enter Product Id:'); prodId = sc1.nextLine(); prod.setProId(prodId); System.out.println('Enter Product Name'); prodName = sc1.nextLine(); prod.setProName(prodName); System.out.println('Enter Product Price:'); price = sc1.nextLine(); prod.setPrice(price); String jsonString = obj .writerWithDefaultPrettyPrinter() .writeValueAsString(prod); System.out.println(jsonString); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // close scanner class object sc1.close(); } } class Product { //Creating properties of Product class private String proId; private String name; private String price; //Getter and Setters public String getProId() { return proId; } public void setProId(String proId) { this.proId = proId; } public String getName() { return name; } public void setProName(String name) { this.name = name; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } @JsonValue public String toString() { // TODO Auto-generated method stub return '{ ProductId = '+ proId + ', ProductName = ' + name + ', ProductPrice = ' + price + '}'; } } 

Излаз:

Напомене о серијализацији у Јацксону

@ЈсонРоотНаме

@ЈсонРоотНаме анотација је једна од најважнијих напомена која се користи за означавање назива ПОЈО-а који треба да се серијализује. Једноставним речима, користи се за омотавање објекта за серијализацију са елементом највишег нивоа. Такође долази у категорију Белешка о серијализацији .

јава како заобићи

Проследимо име као параметар у напомену. Такође користимо 'ВРАП_РООТ_ВАЛУЕ' , тј. карактеристика енума СериализатионФеатуре. Омогућавамо га за умотавање вредности руте у ЈСОН објекат једног својства где је кључ име руте.

Узмимо пример за @ЈсонРоотНаме да разумете како то функционише:

ЈсонРоотНамеЕкампле.јава

 import java.io.IOException; import java.util.Scanner; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.annotation.JsonRootName; // create JsonRootNameExample class to serialize an object public class JsonRootNameExample { // main() method start public static void main(String args[]){ // create instance of the ObjectSerialization class ObjectMapper obj = new ObjectMapper(); Scanner sc1 = new Scanner(System.in); try { Product prod = new Product(); String prodId, prodName, price; System.out.println('Enter Product Id:'); prodId = sc1.nextLine(); prod.setProId(prodId); System.out.println('Enter Product Name'); prodName = sc1.nextLine(); prod.setProName(prodName); System.out.println('Enter Product Price:'); price = sc1.nextLine(); prod.setPrice(price); String jsonString = obj. enable(SerializationFeature.WRAP_ROOT_VALUE) .writerWithDefaultPrettyPrinter() .writeValueAsString(prod); System.out.println(jsonString); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // close scanner class object sc1.close(); } } @JsonRootName(value = 'Details') class Product { //Creating properties of Product class private String proId; private String name; private String price; //Getter and Setters public String getProId() { return proId; } public void setProId(String proId) { this.proId = proId; } public String getName() { return name; } public void setProName(String name) { this.name = name; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } @Override public String toString() { // TODO Auto-generated method stub return ''Product [ProductId '+ proId + ', ProductName = ' + name + ', ProductPrice = ' + price + ']'; } } 

Излаз:

Напомене о серијализацији у Јацксону

@ЈсонСериализе

@ЈсонСериализе је једна од најчешће коришћених напомена приликом серијализације Јава објекта. Користи се за дефинисање прилагођеног серијализатора за маршалирање Јсон објекта.

Узмимо пример да разумемо како то помаже у серијализацији објекта.

ЈсонСериализерЕкампле.јава

 import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.StdSerializer; // create class JsonSerializeExample to understand how we can use custom specific serializer public class JsonSerializeExample { //main method start public static void main(String args[]) throws ParseException { // create instance of the ObjectSerialization class ObjectMapper obj = new ObjectMapper(); // create instance of SimpleDateFormat class to format a date SimpleDateFormat sdf = new SimpleDateFormat('dd-MM-yyyy'); Scanner sc1 = new Scanner(System.in); try { Product prod = new Product(); String prodId, prodName, price; Date exp; System.out.println('Enter Product Id:'); prodId = sc1.nextLine(); prod.setProId(prodId); System.out.println('Enter Product Name'); prodName = sc1.nextLine(); prod.setProName(prodName); System.out.println('Enter Product Price:'); price = sc1.nextLine(); prod.setPrice(price); System.out.println('Enter expiry date of product in dd-MM-yyyy format:'); exp = sdf.parse(sc1.nextLine()); prod.setDate(exp); String jsonString = obj .writerWithDefaultPrettyPrinter() .writeValueAsString(prod); System.out.println(jsonString); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } // create class Product class Product { //Creating properties of Product class private String proId; private String name; private String price; @JsonSerialize(using = DateSerializer.class) private Date expire; //Getter and Setters public String getProId() { return proId; } public void setProId(String proId) { this.proId = proId; } public String getName() { return name; } public void setProName(String name) { this.name = name; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } public Date getDate() { return expire; } public void setDate(Date expire) { this.expire = expire; } } // create custom serializer by extending StdSerializer class DateSerializer extends StdSerializer { // declare and initialize serialVersionUID private static final long serialVersionUID = 1L; private static SimpleDateFormat sdf = new SimpleDateFormat('dd-MM-yyyy'); // default and parameterized constructor public DateSerializer() { this(null); } public DateSerializer(Class t) { super(t); } // override serialize method @Override public void serialize(Date d1, JsonGenerator jsonGen, SerializerProvider serializer) throws IOException { jsonGen.writeString(sdf.format(d1)); } } 

Излаз:

Напомене о серијализацији у Јацксону