Jersey框架常用注解3:媒体类型注解@Consumes和@Produces

@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错误。以前面的用户创建请求为例
Jersey框架常用注解3:媒体类型注解@Consumes和@Produces_第1张图片

你可能感兴趣的:(Jersey,Jersey系列:实践全干货)