SpringMVCのソースコード415(サポートされていないメディアタイプ)が発生する原因と解決方法
Spring MVCでは、クライアントの要求するメディアタイプがサーバーでサポートされていない場合に、415 (Unsupported Media Type)エラーが戻されます。このエラーは、クライアントが要求したContent-Typeが、サーバーがサポートするメディアタイプと一致しない場合によく発生します。
原因:
- クライアントから送信されてきた Content-Type は、サーバーがサポートしているメディアタイプに一致していません。例えば、クライアントが送信してきた Content-Type は「application/xml」であるのに対し、サーバーがサポートしているのは「application/json」のみです。
- クライアントがContent-Typeヘッダーを送信しなかったか、送信されたContent-Typeヘッダーが不正です。
- サポートされたメディアタイプがサポートされるよう、サーバーが正しく構成されていません。
解決策:
- クライアントから送信されるContent-Typeが、サーバーがサポートするMedia Typeと一致していることを確認します。サーバーがサポートするMedia Typeを確認して、クライアントから送信されたContent-Typeと比較することで行います。
- クライアントから送られてきたContent-Typeヘッダがない、あう間違ったContent-Typeヘッダーが送られてきた場合は、リクエスト内で正しいContent-Tyepヘッダーを追加する事で解決できます。
- サーバーの構成を正しく設定することで、サポートされるメディアタイプを追加できます。
また、サーバが複数のメディアタイプに対応する場合、返すメディアタイプは produces 属性で指定できます。例えば、RestController の @RequestMapping アノテーションで produces 属性を追加して、返すメディアタイプを指定します。
@RestController
@RequestMapping(value = "/example", produces = "application/json")
public class ExampleController {
// ...
}
このため、クライアントから当該のインターフェイスにリクエストが来ると、アプリケーション/jsonのデータタイプのみがサーバから返され、メディアタイプがクライアントからリクエストされたものと一致しない場合は、415エラーが返されます。