创建文字/纯色泽西岛回复

Jes*_*ess 5 java rest web-services jaxb jersey

我有一些有效的代码,但我正在寻找一种更好的方法。我有一个RESTful Web API,我想支持JSON,XML和TEXT媒体类型。使用带有JAXB注释的“ bean”类,可以轻松实现JSON和XML。我只是使用了纯文本/纯文本,但是我希望Jersey更加智能,并且能够使用来将我的bean列表转换List<Machine>为字符串toString

这是Resource类。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();
    }
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:

如果有关系,我将使用嵌入式的Jetty和Jersey选项。

谢谢!

bdo*_*han 4

为了执行以下操作,您需要执行MessageBodyReader/操作:Writer

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

需要编写的代码并不多,如果您能够将其编写得足够通用,您将能够从中得到一些重用。