在REST API开发中,400 Bad Request和415 Unsupported Media Type是两种不同的HTTP状态码,它们的含义和触发条件有明确区别:
Content-Type
或Accept
头与服务器支持的媒体类型不匹配(如客户端发送XML但服务端只接受JSON)。Accept
或Accept-Post
头说明支持的格式(RFC 7231)StatusService
实现联动处理:public class CustomStatusService extends StatusService {
@Override
public Representation getRepresentation(Status status, Request request, Response response) {
if (status.getCode() == 400) {
// 检查是否是Content-Type导致的问题
if (!isMediaTypeSupported(request)) {
status = new Status(415, "Unsupported Media Type");
response.setStatus(status);
}
}
return super.getRepresentation(status, request, response);
}
private boolean isMediaTypeSupported(Request request) {
MediaType contentType = request.getEntity().getMediaType();
return getSupportedMediaTypes().contains(contentType);
}
}
headers: { 'Content-Type': 'application/json' }
总结:Restlet默认不会自动将400转换为415,需要开发者显式处理媒体类型验证。正确的状态码使用有助于客户端快速定位问题。