@Consumes
指定http请求的MIME类型,默认是*/*,表示任意的MIME类型。该注解的值是数组类型,支持多个MIME类型,可以使用MediaType来指定MIME类型。
@Produces
指定http响应的MIME类型,默认是*/*,表示任意的MIME类型。该注解的值是数组类型,支持多个MIME类型,可以使用MediaType来指定MIME类型。
例如指定创建用户的方法消费的媒体类型和响应体都为JSON。
@Path("/user")
public class UserRes {
//创建用户
@PUT
@Path("")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String add(String params) {
return "";
}
}
MediaType常用的MIME类型如下
application/xml
application/json
application/x-www-form-urlencoded
multipart/form-data
application/octet-stream
text/plain
text/xml
text/html
以上MIME类型默认都不是UTF-8,如果传输的消息体包含中文,会产生乱码问题,解决方式是指定MediaType的编码。
- 不太规范的方式
@Consumes(MediaType.APPLICATION_JSON+";charset=utf-8")
@Path("/user")
public class UserRes {
//创建用户
@PUT
@Path("")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON+";charset=utf-8")
public String add(String params) {
return "";
}
}
更规范的方式,定义一个通用的指定编码集的自定义Utf8MediaType常量类。
public static final String APPLICATION_JSON = "application/json;charset=utf-8"
public static final String APPLICATION_JSON = "application/xml;charset=utf-8"
@Path("/user")
public class UserRes {
//创建用户
@PUT
@Path("")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(Utf8MediaType.APPLICATION_JSON)
public String add(String params) {
return "";
}
}
媒体类型不匹配问题
问题现象:如果指定了@Consumes(MediaType.APPLICATION_JSON)
,但在请求中使用的是其他媒体类型,会产生415 Unsupported Media Type
错误。以前面的用户创建请求为例