Имам услуга на Jersey REST и бих искал да имам метод GET, който връща void при успех, но връща обект ErrorResponse, ако има проблем. Ето как изглежда моят метод:
@GET
@Path(ResourceConstants.PATH_START_BATCH)
@Produces(MediaType.APPLICATION_JSON)
public void startBatch(@QueryParam(ResourceConstants.PARAM_BATCH_ID) String batchId)
{
try
{
batchService.startBatch(batchId);
}
catch (Exception ex)
{
ErrorResponse errorResponse = new ErrorResponse();
Map<String, String> responseDetails = errorResponse.getResponseDetails();
responseDetails.put("Failure", "Failed to start with exception " + ex.getMessage());
throw WebServiceException.generate(ex, errorResponse);
}
}
и класът WebServiceException изглежда така:
public class WebServiceException extends WebApplicationException
{
private static final long serialVersionUID = 1L;
public WebServiceException(ErrorResponse errorResponse)
{
super(Response.serverError()
.status(Status.INTERNAL_SERVER_ERROR)
.entity(errorResponse)
.type(MediaType.APPLICATION_JSON)
.build());
}
public WebServiceException(Throwable throwable, Response response)
{
super(throwable, response);
}
public static WebServiceException generate(Throwable throwable, ErrorResponse errorResponse)
{
Throwable rootCause = WebServiceException.getRootCause(throwable);
Response response = Response.serverError()
.status(Status.INTERNAL_SERVER_ERROR)
.entity(errorResponse)
.type(MediaType.APPLICATION_JSON)
.build();
return new WebServiceException(rootCause, response);
}
private static Throwable getRootCause(Throwable current)
{
Throwable root = current.getCause();
if (root != null)
{
return WebServiceException.getRootCause(root);
}
else
{
return current;
}
}
}
Когато тествам с невалиден идентификатор на партида, отговорът ми е празен набор от празни скоби {}.
Мога ли да върна JSON обект в грешката, ако методът върне void?