【Spring】ResponseEntityに任意のレスポンスヘッダを設定する

概要

  • ResponseEntityにはレスポンスヘッダを設定できる
  • レスポンスヘッダはHttpHeadersに格納するのがおすすめ
    • ResponseEntityはヘッダをMultiValueMapで受け取る
    • HttpHeadersは特化した用途のMultiValueMap
  • 単純追加だと基本的にブラウザ側で無視されるため、Access-Control-Expose-Headersに加える必要がある

サンプル

import org.springframework.http.HttpHeaders
import org.springframework.http.HttpStatus
import org.springframework.http.ResponseEntity

val body = TODO("何らかの処理")
val customHeader = "foo" // 任意のheaderName

val headers = HttpHeaders().apply {
    // ブラウザにカスタムヘッダが無視されないよう、Access-Control-Expose-Headersを設定している
    // https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Access-Control-Expose-Headers
    accessControlExposeHeaders = listOf(customHeader)
    set(customHeader, "true") // 値は適当にtrueを設定
}

val response = ResponseEntity(body, headers, HttpStatus.OK)

参考

spring.pleiades.io

developer.mozilla.org