如何从Jersey 400响应代码返回XML

时间:2013-02-28 14:34:48

标签: java jersey

当客户端执行POST时,我必须验证字符串参数是否有坏字符。当我找到一个时,我需要返回一条消息来指示错误。通常我使用text / plain,但我们的客户正在使用一些必须从POST请求中获取XML的Oracle工具(如图所示)。

我创建了一个自定义异常来创建响应:

public class RESTException extends WebApplicationException {
public RESTException(Response.Status status, String messageKey) {
    super(Response.status(status).entity("a messasge").type(MediaType.TEXT_PLAIN).build());
}
public RESTException(Response.Status status, String messageKey, boolean useEntity) {
    super(Response.status(status).entity(new CDSResponse(Integer.toString(status.getStatusCode()), PropertyFileAccessor.getInstance().getPropertyWithDefault(messageKey))).type(MediaType.APPLICATION_XML).build());
}

通常我在创建错误时执行上面的第一个方法,但是我用实体制作了第二个方法来返回XML。

以下是我用作终点的方法:

@POST
@Consumes({"application/assetId-v1+xml", "application/assetId-v1+json"})
@Produces({MediaType.APPLICATION_XML})
@Path("/{dealerCode}/{dcn}/{make}/{serialNumber}")
public Response postV1(AssetId assetId, @PathParam("dealerCode") String dealerCode, @PathParam("dcn") String dcn, @PathParam("make") String make, @PathParam("serialNumber") String serialNumber) {
    if (!StringUtils.isAlphanumeric(dealerCode)) {
        throw new RESTException(Status.BAD_REQUEST, "equipmentdata.400.invalid.dealer.code", true);
    }

这是问题/错误:当我扔400时,我得到这个作为回应:

cat.dds.cds.model.CDSResponse@29626a

但是当我抛出任何其他状态代码时,我得到了xml。怎么了?

1 个答案:

答案 0 :(得分:0)

我的解决方案很简单。不要送400s。在这种特殊情况下,Oracle工具只接受200秒,所以它不是很安静。所以一切都是200,响应XML中有真正的代码。