【发布时间】:2017-06-29 13:07:57
【问题描述】:
我有一个带有绑定的 REST-dsl 骆驼路由:json_xml 使用 .type() 和 outType()。当没有异常发生时,它工作得很好。即 json 输入给出 json 输出。 xml 输入给出 xml 输出。
但是,当我收到 IllegalArgumentException 时,我总是返回 XML。发生异常时,我创建了一个 ErrorResponse POJO。对于 json,CONTENT_TYPE 设置为“application/json”。发生异常时如何返回 POJO 并让骆驼编组到 JSON/XML(给定 ResBindingMode.json_xml)?
onException(IllegalArgumentException.class)
.log(LoggingLevel.ERROR, LOGGER, "error")
.handled(true)
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(400))
.setHeader(Exchange.CONTENT_TYPE, exchangeProperty(Exchange.CONTENT_TYPE))
.bean(errorResponseTranslator);
restConfiguration().component("restlet").port(port).skipBindingOnErrorCode(true)
.bindingMode(RestBindingMode.json_xml);
rest("/whatever/api/v1/request")
.post().type(RequestDto.class).outType(ResponseDto.class)
.route()
.setProperty(Exchange.CONTENT_TYPE, header(Exchange.CONTENT_TYPE))
...process
ErrorDto:
@XmlRootElement(name = "errorResponse")
@XmlAccessorType(XmlAccessType.PROPERTY)
public class ErrorResponseDto {
private String errorCode;
private String message;
@XmlElement(name = "message")
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@XmlElement(name = "errorCode")
public String getErrorCode() {
return errorCode;
}
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
}
【问题讨论】:
标签: json rest apache-camel marshalling