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

标签 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。怎么了?

最佳答案

我的解决方案很简单。不要发回 400。在这种特殊情况下,Oracle 工具将只接受 200s,所以它不是很平静。所以一切都是 200,响应 XML 中包含真实代码。

关于java - 如何从 Jersey 400 响应代码返回 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15138117/

相关文章:

java - 使用不同的数组填充数组,但插入的某些值为空

java - Android: ListView 未显示

java - 统计分析

java - Dropwizard + Jersey : "Not inside a request scope" when creating custom annotation

java - Jersey 制作媒体类型冲突

java - 如何将 drools 集成到 Jersey 休息 Web 服务中

java - 在 Tomcat 8.5 上部署 Jersey 应用程序

java - 是否可以使用 Mockito 进行严格的模拟?

java - 如何让 Jersey 客户端在根请求实体周围写入 `[` 和 `]`?

java - private int 在设置后不保留其值