我正在使用Play创建RESTful服务。我希望Play在请求标题中拒绝媒体类型未指定为JSON的任何请求。Play Framework:返回400而不是415
那里的教程有一个很好的例子。 http://www.playframework.com/documentation/2.0/JavaJsonRequests
阅读的地方说......
@BodyParser.Of(Json.class)
public static index sayHello() {
String name = json.findPath("name").getTextValue();
if(name == null) {
return badRequest("Missing parameter [name]");
} else {
return ok("Hello " + name);
}
}
注:这样一来,一个400 HTTP响应将自动返回非JSON请求。
为什么它返回HTTP错误400,错误的请求,而不是HTTP错误415,不支持的媒体类型?
有没有办法改变这种行为?
我不知道,如果他们谈论的标题或内容。如果头部设置为json,但内容为另一种格式,则400响应看起来很好。如果它是关于标题而不是你说得对,415似乎更合适。你测试过了,看到了错误的回应吗?如果是的话,如果还没有,你可以提交一个错误报告。 – Kapep
Kapep的澄清请求是一个很好的要求。如果您在请求中将“Content-header”设置为“application/json”,并且您收到了400有效json **的400,那么您在BodyParser中间件中发现了一个错误。如果您的JSON格式不正确或标题未发送,则400可以。一个可能的解决方法是可能为body构建您自己的JSON解析注释(也许通过扩展现有的bodyparser),尽管这看起来像是矫枉过正。 –
我想我总是得到400让我检查。非常感谢。 –