REST 资源方法的默认 MIME 类型
Default MIME types for REST resource methods
我正在尝试了解 RESTful 中的 MIME 类型 services.If 有一个资源方法 (sayHello),如下所示
@Path("/customers")
public class CustomerResource {
@GET
public String sayHello(){
return "Hello World";
}
}
我没有在上述方法上添加任何 @Produces
或 @Consumes
注释。我有以下问题。
- 上面的方法是否有任何默认的 MIME 类型用于发送响应?
- 或者它是否根据来自传入请求的 "accept-type" 生成响应内容类型?
- 会不会发生请求没有指定它接受什么内容类型的情况?如果是这样,上述资源方法将产生什么响应内容类型?
提前致谢。
通常它会默认为application/octet-stream
,除非客户端设置Accept
header,在这种情况下,这就是将被使用。
您需要注意的一件事是没有 MessageBodyWriter
来处理 application/octet-stream
和大多数类型。例如说你有
@GET
public SomeModel get() {}
如果客户端没有设置 Accept: application/json
header,那么运行时将寻找 MessageBodyWriter
可以序列化 SomeModel
到 application/octet-stream
],它会失败,你会得到一个异常,显示类似 "No MessageBodyWriter found for mediatype application/octet-stream and type SomeModel" 的内容。
所以放置 @Produces
总是一个好主意。另一个好处是 you 确定端点 可以 产生什么类型。例如,如果您有 @Produces("application/json")
,并且客户端设置了 Accept: application/xml
header,那么他们将得到一个 406 不可接受的错误代码,这是 应该 发生。
注意第一段,我用了经常这个词。情况并非总是如此。对于某些情况,运行时将根据 return 类型做出假设。例如,如果你 return a String
运行时可能会选择 text/plain
.
但是就像我说的,总是 最好有 @Produces
和 @Consumes
注释。这些提示不仅适用于开发人员,也适用于运行时做出决定。
我正在尝试了解 RESTful 中的 MIME 类型 services.If 有一个资源方法 (sayHello),如下所示
@Path("/customers")
public class CustomerResource {
@GET
public String sayHello(){
return "Hello World";
}
}
我没有在上述方法上添加任何 @Produces
或 @Consumes
注释。我有以下问题。
- 上面的方法是否有任何默认的 MIME 类型用于发送响应?
- 或者它是否根据来自传入请求的 "accept-type" 生成响应内容类型?
- 会不会发生请求没有指定它接受什么内容类型的情况?如果是这样,上述资源方法将产生什么响应内容类型?
提前致谢。
通常它会默认为application/octet-stream
,除非客户端设置Accept
header,在这种情况下,这就是将被使用。
您需要注意的一件事是没有 MessageBodyWriter
来处理 application/octet-stream
和大多数类型。例如说你有
@GET
public SomeModel get() {}
如果客户端没有设置 Accept: application/json
header,那么运行时将寻找 MessageBodyWriter
可以序列化 SomeModel
到 application/octet-stream
],它会失败,你会得到一个异常,显示类似 "No MessageBodyWriter found for mediatype application/octet-stream and type SomeModel" 的内容。
所以放置 @Produces
总是一个好主意。另一个好处是 you 确定端点 可以 产生什么类型。例如,如果您有 @Produces("application/json")
,并且客户端设置了 Accept: application/xml
header,那么他们将得到一个 406 不可接受的错误代码,这是 应该 发生。
注意第一段,我用了经常这个词。情况并非总是如此。对于某些情况,运行时将根据 return 类型做出假设。例如,如果你 return a String
运行时可能会选择 text/plain
.
但是就像我说的,总是 最好有 @Produces
和 @Consumes
注释。这些提示不仅适用于开发人员,也适用于运行时做出决定。