2013-02-28 66 views
2

当客户端执行POST时,我必须验证字符串参数是否有错误的字符。当我找到一个我需要返回一条消息,以指出什么是不正确的。通常我使用文本/纯文本,但我们的客户正在使用一些必须从POST请求中取回XML的Oracle工具(请参阅图)。如何从Jersey 400返回XML响应代码

我已创建自定义异常创建响应:

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。

这里是我的endpoing使用方法:

@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,我得到这个作为响应:

[email protected] 

但当我抛出任何其他状态代码,我得到XML。这是怎么回事?

+0

您如何测试您的宁静服务? – Sikorski 2013-02-28 15:17:44

+0

我在Tomcat服务器上使用Jersey的版本1.17。我在Chrome中使用REST控制台进行测试... – markthegrea 2013-02-28 15:19:50

+0

您的CDSResponse是否具有@XmlRootElement等XML注释。? – Sikorski 2013-02-28 15:21:10

回答

0

我的解决方案很简单。不要发回400。在这种特殊情况下,Oracle工具只能接受200个,所以它不是很安静。因此,所有内容都是200,并且响应XML中包含真实的代码。

相关问题