0
votes

Quelle est la bonne façon de consommer et de produire des données JSON dans les démarrages à partir d'une demande d'une volée Android

Je ne sais pas comment envoyer et recevoir correctement les demandes du côté Android et du côté serveur.

Permet de dire par exemple, lors de l'enregistrement, je veux vérifier si un utilisateur existe en vérifiant leur adresse e-mail contre la DB. P>

Ma compréhension actuelle de la manière de mettre en œuvre ce serait la suivante: p>

Code de demande Android: P>

//Assume repo is injected that checks if email exists

public Map<String, String> checkIfUserAlreadyExists(Map<String, String> user) { //Should I be returning response status instead of JSON?
    Map<String, String> resultMap = new HashMap<>();
    if (usersRepository.existsByEmailAddress(user.get("email_address"))) {
        resultMap.put("result", "error");
        return resultMap;
    } else {
        //Save email if not registered
        resultMap.put("result", "registered");
        return resultMap;
    }
}


0 commentaires

3 Réponses :


0
votes

Dans la programmation, il n'y a pas de solution correcte ou incorrecte. Toutefois, si vous souhaitez que votre vie facilite la manipulation de JSON, je vous recommande d'utiliser API pour JSON Serializtion E.G GSON. Ce lien est un didacticiel sur la manière d'intégrer et d'utiliser gson: https://medium.com/quick-code/parsing-json-on-android-utuer-gson-and-volley-83d6715776f8

Ce lien est le GitHub de la dépendance: https://github.com/google/gson

N'hésitez pas à rechercher une autre bibliothèque pour la sérialisation.

mise à jour: Une bonne réponse du côté serveur pour une inscription serait un utilisateur avec son identifiant généré automatiquement ou un booléen. Avec la première solution, la réponse à l'ID d'auto-générée automatiquement, une réponse nulle signifie une défaillance d'un utilisateur complet signifie un succès. Avec le deuxième puits c'est un booléen.


0 commentaires

0
votes

oubliez la volley, utilisez la modernisation. Relofit convertit automatiquement la réponse JSON en objets Java, à l'aide de Volley, vous devrez faire un travail supplémentaire pour cela. Et j'expliquerai aussi une partie de l'API. Si vous construisez votre structure comme ce que je vous expliquer ci-dessous, vous gérerez mise à l'échelle et en ajoutant plus de point final à votre application comme un pro :)

----------------- ------------ Android --------------------------------- strong> P >

modernisation forte> p>

Ajoutez ces dépendances à Android P>

public GenericResponse  checkIfUserAlreadyExists(User user) { 
    GenericResponse genRes = new GenericResponse();
    if (usersRepository.existsByEmailAddress(user.getEmail())) {
        genRes.setError(new CustomError(1001, "User email already exists"))
        return genRes;
    } else {
         user = dao.registerUser(user);
         genRes.setUser(user);
        return genRes;
    }
}


2 commentaires

Merci d'avoir répondu! Utiliserait la modernisation et l'application d'une technique similaire à celle-ci est la manière standard de la fabrication d'appels d'API?


Absolument oui !



0
votes

Pour répondre à votre question, je tenterai de résoudre votre problème en utilisant ma propre expérience personnelle avec l'enregistrement des utilisateurs. Votre meilleur pari est d'utiliser un sérialiseur comme Jackson (exemple ci-dessous) ou Gson. Cela vous permettra de créer facilement Java Pojo de JSON Data et de créer JSON à partir de Java Pojo's. Avis J'utilise une méthode de constructeur, il s'agit simplement d'un autre moyen pratique de construire vos modèles pour des tests d'unité, des tests d'intégration ou en général comme ci-dessous.

Vérifiez également les techniques de sécurité à ressort, vous pouvez donc coder correctement le mot de passe de l'utilisateur, etc. Ce qui suit serait une bonne ressource. P>

https://www.baeldung.com/spring-security-registrement P>

USERCONTROLLER.JAVA P>

@JsonDeserialize(builder = User.Builder.class)
@JsonSerialize
public class User {

    @Id
    private UUID id;

    @NotNull
    private String firstName;

    @NotNull
    private String lastName;

    @NotNull
    private String username;

    @NotNull
    private String password;

    @NotNull
    private Integer role;

    @NotNull
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
    private LocalDateTime createdDateTime;

    @NotNull
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
    private LocalDateTime lastModifiedDateTime;

    public User(Builder builder ) {
        this.id = builder.id;
        this.firstName = builder.firstName;
        this.lastName = builder.lastName;
        this.username = builder.username;
        this.password = builder.password;
        this.role = builder.role;
        this.createdDateTime = builder.createdDateTime;
        this.lastModifiedDateTime = builder.lastModifiedDateTime;
    }

    public static Builder builder() {
        return new Builder();
    }

    @JsonIgnoreProperties(ignoreUnknown = true)
    @JsonPOJOBuilder(withPrefix = "")
    public static final class Builder {
        private UUID id;
        private String firstName;
        private String lastName;
        private String username;
        private String password;
        private Integer role;
        private LocalDateTime createdDateTime;
        private LocalDateTime lastModifiedDateTime;

        public Builder from(User user) {
            return this.id(user.id)
                .firstName(user.firstName)
                .lastName(user.lastName)
                .username(user.username)
                .password(user.password)
                .role(user.role)
                .createdDateTime(user.createdDateTime)
                .lastModifiedDateTime(user.lastModifiedDateTime);
        }

        public Builder id(UUID id) {
            this.id = id;
            return this;
        }

        public Builder firstName(String firstName) {
            this.firstName = firstName;
            return this;
        }

        public Builder lastName(String lastName) {
            this.lastName = lastName;
            return this;
        }

        public Builder username(String username) {
            this.username = username;
            return this;
        }

        public Builder password(String password) {
            this.password = password;
            return this;
        }

        public Builder role(Integer role) {
            this.role = role;
            return this;
        }

        public Builder createdDateTime(LocalDateTime createdDateTime) {
            this.createdDateTime = createdDateTime;
            return this;
        }

        public Builder lastModifiedDateTime(LocalDateTime lastModifiedDateTime) {
            this.lastModifiedDateTime = lastModifiedDateTime;
            return this;
        }

        public Builder applyDefaults() {
            if (this.id == null) {
                this.id = UUID.randomUUID();
            }
            if (this.createdDateTime == null) {
                 createdDateTime = LocalDateTime.now();
            }
            if (this.lastModifiedDateTime == null) {
                lastModifiedDateTime = LocalDateTime.now();
            }
            return this;
        }

        public User build() {
            return new User(applyDefaults());
        }

        public UUID getId() {
            return id;
        }

        public String getFirstName() {
            return firstName;
        }

        public String getLastName() {
            return lastName;
        }

        public String getUsername() {
            return username;
        }

        public String getPassword() {
            return password;
        }

        public Integer getRole() {
            return role;
        }

        public LocalDateTime getCreatedDateTime() {
            return createdDateTime;
        }

        public LocalDateTime getLastModifiedDateTime() {
            return lastModifiedDateTime;
        }
    }

    public UUID getId() {
        return id;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getRole() {
        return role;
    }

    public LocalDateTime getCreatedDateTime() {
        return createdDateTime;
    }

    public LocalDateTime getLastModifiedDateTime() {
        return lastModifiedDateTime;
    }
}


0 commentaires