web-dev-qa-db-fra.com

Renvoyer la valeur null dans le corps de ResponseEntity (Spring Boot RESTful)

Je crée un service Web RESTFul avec les services suivants disponibles:

@RequestMapping(value = "/test", produces = "application/json", method = RequestMethod.GET)
public ResponseEntity<List<GenericModel>> returnEmpty() {
    List<GenericModel> genericModelList = new ArrayList<>();

    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Type", "application/json; charset=utf-8");

    return responseEntity = new ResponseEntity<>(genericModelList, headers, HttpStatus.OK);
}

Lorsque la liste vide revient, la réponse suivante s'affiche dans le navigateur:

[]

Comment puis-je recevoir dans le navigateur une réponse "nulle" au lieu de []? Il y a un moyen de dire à Spring de rendre la taille 0 de ma liste comme "null" et non comme []?

4

Une façon de la faire pivoter selon que la genericModelList est vide ou pas pourrait être: -

if(genericModelList.isEmpty()) {
    return new ResponseEntity<>(null, headers, HttpStatus.OK);
} else {
    return new ResponseEntity<>(genericModelList, headers, HttpStatus.OK);
}

ou bien vous pouvez ignorer body en utilisant ResponseEntity(MultiValueMap<String,String> headers, HttpStatus status) constructeur également.

2
nullpointer

Parce que vous venez d’initialiser la genericModelList en tant que empty list, pas null. Ou vous pouvez vérifier la taille de la liste avant de renvoyer la réponse avec un autre corps.

1
LHCHIN

Merci à tous, je vais essayer d'être plus clair la prochaine fois. J'ai résolu le problème.

J'essayais d'envoyer "null" dans le corps de mon ResponseEntity> lorsque ma taille de liste était égale à 0, mais Jackson crée un JSON "[]" et non un "null" comme je le voulais. Je n'ai pas trouvé le moyen de changer le comportement de Jackson par défaut, alors j'ai décidé d'abandonner Jackson et d'utiliser la bibliothèque Gson.

Me laisser montrer un exemple de ma solution:

@RequestMapping(value = "/test", produces = "application/json", method = RequestMethod.GET)
public ResponseEntity<String> returnEmpty() {

    List<GenericModel> genericModelList = new ArrayList<>();

    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Type", "application/json; charset=utf-8");

    String body = "";

    if (genericModelList.size() == 0) {
        body = "null";
    } else {
        body = gson.toJson(genericModelList);
    }

    return responseEntity = new ResponseEntity<>(body, headers, HttpStatus.OK);
}

Ainsi, en retournant une chaîne et en analysant JSON moi-même avec Gson au lieu d'utiliser l'analyse automatique de Spring/Jackson, je peux contrôler le JSON résultant. Regardez que je renvoie explicitement une chaîne "null" si mon List.size () == 0.

0