4 votes

Renvoyer un fichier .json statique dans Spring MVC en tant que ressource

Je veux retourner un fichier .json statique depuis le serveur. En outre, à des fins de test, je veux définir le fichier json comme un fichier de ressources (disons data.json) afin de pouvoir le modifier confortablement.

J'ai déjà fait cela, en plaçant data.json dans le répertoire de ressources et en spécifiant une correspondance de ressources avec :

Mon problème est que lorsque data.json est renvoyé, le type de contenu est application/octet-stream, alors que je veux qu'il soit application/json. Comment puis-je spécifier cela ?

De plus, dans mon contrôleur, j'ai quelques méthodes renvoyant une chaîne de caractères (par exemple home), qui sont automatiquement mappées en jsp via InternalResourceViewResolver :

Comment puis-je faire la même chose pour les ressources .json (évidemment sans le processus de compilation jsp) ?

2voto

CodeChimp Points 5970

Je pense que dans votre web.xml vous pouvez ajouter ceci:

  json
  application/json

Je crois que cela indiquera au conteneur web d'appliquer le type MIME application/json à tous les fichiers servis avec une extension .json.

2voto

Master Slave Points 432

Revisiter une ancienne question, juste pour fournir une réponse plus à jour. L'extrait suivant devrait être explicite :

@RestController
public class JsonController {

@GetMapping(value = "/file", produces = MediaType.APPLICATION_JSON_VALUE)
public String defaultQuiz() {
    Resource resource = new ClassPathResource("data.json");
    String json = "";
    try(InputStream stream = resource.getInputStream()) {
        json = StreamUtils.copyToString(stream, Charset.forName("UTF-8"));
    } catch (IOException ioe) {
        throw new YourCustomRuntimeException(ioe.getMessage(), ioe);
    }
    return json;
  }
 }

1voto

Chris Neve Points 893

J'ai réussi avec cela.

@GetMapping(value = "/mon-point-de-fin",
    produces = MediaType.APPLICATION_JSON_VALUE)
public String fetchJson() {
    String json = "";
    try(InputStream stream = getClass().getResourceAsStream("/my-static-json.json")) {
        json = StreamUtils.copyToString(stream, Charset.forName("UTF-8"));
    } catch (IOException ioe) {
        log.error("Impossible de récupérer le JSON! Erreur: " +
                ioe.getMessage());
    }
    return json;
}

Remarque : le fichier JSON se trouve sous src/main/resources

0voto

Naresh J Points 1969

Vous pouvez envoyer une réponse sous forme de chaîne jSON depuis votre contrôleur en ajoutant @ResponseBody à votre méthode de contrôleur demandée comme :

public @ResponseBody String getJsonDetails(){

return object; // l'objet peut être votre liste d'objets (qui enverra une réponse sous forme de JSON) ou une simple chaîne json
}

Et vous devez le configurer en ajoutant le bean suivant dans votre fichier xml spring-context :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X