Προσαρμοσμένη Χαρτογράφηση από JSON σε Java / POJO σε απάντηση άνοιξη RestTemplate

ψήφοι
0

Έχω μια εφαρμογή την άνοιξη εκκίνησης, όπου είμαι με RestTemplate να καλέσετε ένα API αναψυχή και δέχομαι παρακάτω JSON διαμορφωμένη απάντηση:

{
  data: [
    {
      id: 1,
      type: type1,
      config: {
        property1 : value1,
        property2 : value2
      }
    },
    {
      id: 2,
      type: type2,
      config: {
        property3 : value3,
        property4 : value4,
        propArray: [ element1, element2]
      }
    }
  ]
}

Τα μεμονωμένα στοιχεία μέσα συστοιχίας «δεδομένα» έχει μερικές διαφορετικές δομές (2 παραδείγματα ανωτέρω), όπου θέλω να χαρτογραφήσει διαφορετικές Τύποι Class με μεμονωμένα στοιχεία τα οποία εξαρτάται από την αξία του στοιχείου «τύπος».

Για παράδειγμα αξία «type1» θα πρέπει να χαρτογραφήσει σε ένα αντικείμενο της κλάσης τύπου «Type1» και ούτω καθεξής.

Έχω Μαθήματα που δημιουργούνται ως εξής: MyResponse:

public Class MyResponse {
  List<Data> data;
..
  \\getter and setters
}

Δεδομένα:

public Interface Data {}

Type1:

public Class Type1 implements Data {
  private String property1;

  private String property2;
..
  \\getter and setters
}

Τύπος2:

public Class Type1 implements Data {
  private String property3;

  private String property4;

  private List<String> propArray;
..
  \\getter and setters
}

Πώς μπορώ να χαρτογραφήσει παραπάνω δομή υπό όρους;

Δημοσιεύθηκε 09/10/2019 στις 18:55
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
1

Μόνο τρόπο θα μπορούσα να σκεφτώ είναι να πάρει την τιμή που επιστρέφεται ένα String, να το μετατρέψει σε αντικείμενο JSONObject και τη διαδικασία για να δημιουργήσει παρουσίες από τις τάξεις σας. Για παράδειγμα,

    String response = restTemplate.<your-uri>
    JSONObject jsonObject = new JSONObject(response);
    if (jsonObject.get(type).equals(type1) {
        Type1 type1 = new Type1();
        // set values
    } else if (jsonObject.get(type).equals(type2) {
        Type2 type2 = new Type2()
        // set values
    }

Ωστόσο, αυτό δεν είναι επεκτάσιμη και αν πρόκειται να προσθέσετε όλο και περισσότερα είδη θα ήταν πολύ δύσκολο να διατηρηθεί ένα καθαρό κώδικα.

Ένας άλλος τρόπος που μπορείτε να το κάνετε αυτό είναι να δημιουργήσετε μια γενική κατηγορία και να λάβει την απάντηση ο κατάλογος της κατηγορίας αυτής. Με αυτόν τον τρόπο Άνοιξη-boot / jackson υποψ κάνει την χαρτογράφηση. Και πάλι θα πρέπει να προσθέσετε κώδικα για να δημιουργήσετε τις άλλες τάξεις από αυτή τη γενική κατηγορία. Όπως Σαμ επισημαίνεται στο σχόλιο, αυτό θα ήταν μια προτιμώμενη από το Jackson είναι πιο γρήγορα από ό, τι αντικείμενο JSONObject.

Αντί να γράφετε τέτοια βρώμικο κώδικα, θα εξετάσει αν θα μπορούσα εκ νέου αρχιτέκτονα σχέδιό σας / απάντηση σταλεί αν έχετε τον έλεγχό του.

Απαντήθηκε 09/10/2019 στις 20:06
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more