Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Boot Java Discussion :

filtrer une valeur de champs ?


Sujet :

Spring Boot Java

  1. #1
    Membre confirmé
    filtrer une valeur de champs ?
    Bonjour, comment demandé à spring boot de ne pas donnée le contenu d'un champs ?

    voici une requête simple http que je demande:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    http://192.168.1.1:8822/pageHtmls


    voici la réponse:

    [CODE]
    {
    "_embedded" : {
    "pageHtmls" : [ { "titre" : "titre ...", "contentHtml" : "2 novembre", "img" : "https://test.fr/depot/casserol.jpg", "routePublication" : "aquarel", "_links" : { "self" : { "href" : "http://192.168.1.60:6622/pageHtmls/5dcb9044adfe755d8575de78" }, "pageHtml" : { "href" : "http://192.168.1.60:6622/pageHtmls/5dcb9044adfe755d8575de78" } } }, { [/CODE]

    ici le contentHtml n'est qu'une chaine de caractère:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
          "contentHtml" : "2 novembre",


    mais à l'intérieur je mets aussi des images encodés qui peuvent être lourde en taille, j'aimerais donc demandé à spring boot de ne pas donner ce champs ,
    ici on attaque du nosql mongodb, pour avoir ce champs il me faudra donner le numéro de la collection.

    par exemple avec cette requête:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    http://192.168.1.60:6622/pageHtmls/5dcb9044adfe755d8575de78

    merci d'avance de vos réponses

  2. #2
    Membre confirmé
    Bonjour,

    Tu peux utiliser un objet de retour (DTO) spécifique qui ne contient pas le champs en question ou alors utiliser l'annotation @JsonIgnore sur celui-ci (ou son getter).
    D'une façon générale, exposer directement tes entités est problématique et source de conflits.
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    Membre confirmé
    merci de ta réponse

    j'ai donc essayer json ignore:

    Code java :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       // @JsonIgnore
        public String getcontentHtml() {
            return null;
            //return this.contentHtml;
        }

    est cela fonctionne bien j'ai caché le contentHtml.

    Par contre j'ai tenté le DTO mais je me retrouve avec des résultats vide ?

    voici l'entité pagehtml:

    Code java :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    @Document
    @Data @AllArgsConstructor @NoArgsConstructor 
    public class PageHtml {
     
        @Id
        private String id; //id est le numéro de sommaire id
        private String titre;
        private String contentHtml;
        private String img;
        private String routePublication;
     
    }
     
    }


    voici pagehtml DTO:

    Code java :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    @Document
    @Data @AllArgsConstructor @NoArgsConstructor 
    public class PageHtmlDto {
     
        @Id
        private String id; //id est le numéro de sommaire id
        private String titre;
        private String img;
        private String routePublication;
     
     
     
    }


    voici mon service:

    Code java :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
     
    @RestController
    public class PageHtmlService {
     
      @Autowired
      PageHtmlRepository PageHtmlRepository;
     
      @Autowired
      private ModelMapper modelMapper;
     
      public String countRouteMatiere(@RequestParam("routeMatiere") String routeMatiere) {
        return "nombre de route de cette matiere" + PageHtmlRepository.countByRoutePublication(routeMatiere);
      }
     
      @GetMapping(value = "/page/{id}")
      public @ResponseBody PageHtmlDto getOrder(@PathVariable("id") String id) {
        Optional<PageHtml> page = PageHtmlRepository.findById(id);
     
        PageHtmlDto PageHtmlDto = modelMapper.map(page,PageHtmlDto.class);
        System.out.println(PageHtmlDto);
        return  PageHtmlDto;
      }
     
    }


    le résultat de tout les attributs sont à null ?

    Code java :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    {"id":null,"titre":null,"img":null,"routePublication":null}


    je n'ai pas d'erreur générer à cette ligne ? par contre la variable page à bien quelque chose

    [CODE="java"]
    System.out.println(page); // Optional[PageHtml(id=5dc9092d3cce2c6bde908e62, titre=titre ..., contentHtml=2 novembre, PageHtmlDto PageHtmlDto = modelMapper.map(page,PageHtmlDto.class); [/CODE]

    finalement j'ai trouvé une solution plus simple, je copie la repository, je supprime son attribut que ne ne souhaite pas affiché , et je modifie le type que je souhaite avoir

    [CODE="java] public List findByroutePublication(@Param("rt") String routePublication); [/CODE]

###raw>template_hook.ano_emploi###