La cause était que j'ai essayé de renvoyer JSON même si produit =" text / csv "
était défini.
La situation est la suivante.
--Retour csv (set produit =" text / csv "
) Définir le point final
--Au moment de l'erreur d'agrégation, l'état est 400 et le contenu de l'erreur est compressé dans JSON et renvoyé.
En fait, les annotations suivantes ont été ajoutées.
@PostMapping(value = "[point final]", produces = "text/csv")
--L'état devient 406 en cas d'erreur
HttpMediaTypeNotAcceptableException
se produitCe n'était pas grave si la spécification de «produit» était supprimée.
@PostMapping(value = "[point final]")
Si vous ne spécifiez pas «produit», il sera traité comme bon, donc s'il n'y a pas de problème, vous n'avez pas à le spécifier Il semble.
Si vous avez besoin de le spécifier dynamiquement et explicitement, vous pouvez écrire la réponse directement en utilisant HttpServletResponse
.
Dans ce cas, vous pouvez écrire comme suit.
@PostMapping(value = "/api/csv")
public void csv(HttpServletResponse response) {
String csv = //Processus d'acquisition CSV;
response.setHeader(
"Content-Disposition",
"attachment;filename=\"" + /*nom de fichier*/ + "\""
);
response.setCharacterEncoding("Shift-JIS");
response.setContentType("text/csv");
try (Writer writer = response.getWriter()) {
writer.write(csv);
} catch (IOException e) {
//La gestion des erreurs
}
}
La gestion des erreurs a été normalisée en utilisant ʻExceptionHandler, mais il a fallu beaucoup de temps pour identifier la cause sans penser que l'ensemble
produitdans le contrôleur pénétrerait jusque-là. Il a été écrit comme
HttpMediaTypeNotAcceptableException` ...
Recommended Posts