背景
興味深い現象を発見しました。つまり、インターフェイスが HTTP ステータス コード 204 を返すと、コード内に戻りがあっても、応答本文が自動的に読み取られます。たとえば
(実際、204 自体は NO_CONTENT を意味しますが、実際にはそれを強制終了して返すとは予想していませんでした)
@PostMapping("/stu")
public Stu stu(HttpServletResponse resp) {
resp.setStatus(204);
Stu stu = new Stu();
stu.setName("Stone");
return stu;
}
@Data
public static class Stu {
private String name;
}
注: 204 行目を削除すると、200 が返されます。
応用
実際、たとえばインターフェイスがある場合、Restful 設計ルールに従って、次のような要件があります。ユーザーが作成された場合は 200 (または作成された 201) を返し、ユーザーが変更された場合は 204 を返します。 (コンテンツなし)
ただし、Java レベルには常に戻り値の型が必要であり、void は使用できません。つまり、204 の場合、return は構文レベルで実行する必要があり、この 204 の動作は期待どおりであると見なされます。
コードが 204 で null を返していることがわかりますが、実際には、null を返したからといって応答本文にコンテンツがないわけではなく、204 である限り、自動的にコンテンツはなくなります。