java - 创建文本/纯 Jersey 响应

标签 java web-services rest jaxb jersey

我有一些可用的代码,但我正在寻找一种更好的方法来实现它。我有一个 RESTful Web API,我想支持 JSON、XML 和 TEXT 媒体类型。 JSON 和 XML 使用带有 JAXB 注释的“bean”类很容易。我刚刚让 text/plain 开始工作,但我希望 Jersey 更智能一点,并且能够转换我的 bean 列表,List<Machine>使用 toString 到字符串.

这是资源类。 JSON 和 XML 媒体类型使用 JAXB 注释 bean 类。纯文本使用自定义字符串格式(基本上是命令的标准输出表示)。

@Path("/machines")
public class MachineResource {
    private final MachineManager manager;

    @Inject
    public MachineResource(MachineManager manager) {
        this.manager = manager;
    }

    @GET @Path("details/")
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public List<Machine> details() {
        return manager.details();
    }
    @GET @Path("details/")
    @Produces({ MediaType.TEXT_PLAIN })
    public String detailsText() {
        StringBuilder text = new StringBuilder();       
        for(Machine machine : manager.details()) {
            text.append(machine.toString());
        }
        return text.toString();
    }

有没有更好的方法让 Jersey 自动转换为字符串,所以我只需要在这里实现一个方法?(可以处理所有 3 种媒体类型)

我看到我可以实现 MessageBodyWriter ,但这似乎更麻烦。

编辑:

如果重要的话,我正在使用嵌入式 Jetty 和 Jersey 选项。

谢谢!

最佳答案

实现 MessageBodyReader/Writer 是您需要做的,以便执行以下操作:

@GET @Path("details/")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN })
public List<Machine> details() {
    return manager.details();
}

要编写的代码不是很多,如果您能够编写足够通用的代码,您将能够从中获得一些重用。

关于java - 创建文本/纯 Jersey 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22611105/

相关文章:

java - 用于 Java 应用程序的 Transact-SQL 嵌入式数据库

java - CXF 不生成枚举映射?

ios - 使用核心 api 上传 DropBox 文件 https ://api-content. dropbox.com/1/files/<root>/<path>

php - 连接 POS 到电子商务 RESTFUL API

java - 我在设置 jpanel 和框架时遇到问题

java - 无法在小米 redmi 4 中调试 android 应用程序?

c# - aspNetCompatibilityEnabled 仅适用于一项服务

java - 有选择地忽略某些 api 的文档

json - Spring Boot : Return a empty JSON instead of empty body when returned object is null

java - 在 Apache Wicket 与@MountPath 发生冲突