我有一个rest api,它返回一个字符串:
@GetMapping("/api/users")
public String getUsers(){
return "DENIS";
}
我从apache camel调用这个api:
from("direct:start")
.setHeader(Exchange.HTTP_METHOD).constant(HttpMethod.GET)
.setHeader(Exchange.CONTENT_TYPE, constant("application/json"))
.to("http://localhost:8085/api/users")
.unmarshal().json(JsonLibrary.Jackson, String.class);
val template = DefaultFluentProducerTemplate.on(camelContext);
String a = template.to("direct://" + "start").request(String.class);
这些操作会导致此错误:
com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'DENIS': was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
at [Source: (org.apache.camel.converter.stream.CachedOutputStream$WrappedInputStream); line: 1, column: 6]
at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2337) ~[jackson-core-2.12.1.jar:2.12.1]
at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:720) ~[jackson-core-2.12.1.jar:2.12.1]
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._reportInvalidToken(UTF8StreamJsonParser.java:3593) ~[jackson-core-2.12.1.jar:2.12.1]
此外,还有一个奇怪的行为:
@Override
public void configure() {
from("timer://test?period=2000")
.setHeader(Exchange.HTTP_METHOD).constant(HttpMethod.GET)
.setHeader(Exchange.CONTENT_TYPE, constant("application/json"))
.to("http://localhost:8085/api/users")
.process(new Processor() {
@Override
public void process(Exchange exchange) {
String body = exchange.getIn().getBody(String.class);
}
});
}
}
如果代码是这样的,那么字符串是反序列化的,但是如果字符串位置是某个对象,它将始终为null,不会有错误,它将为null。虽然在调试器中可以看到对象已经到达了它的字段,但是camel看不到它。
我已经尝试了很多选择,但我不明白是怎么回事。如果我调用返回boolean的api并接受它,那么一切都正常,但它不能处理对象和字符串。
我怎样才能解决这个问题?原因是什么?我已经尝试过使用依赖项,但是没有结果。
我会感激你的帮助
1条答案
按热度按时间ocebsuys1#
第一个案件的判决如下:
在jacksondataformat的帮助下。
第二种选择无法完全解决,发生的情况如下:
必须首先将主体转换为字符串,然后将字符串转换为用户。如果你试图把身体立即变成一个用户,它将永远是空的,我不明白为什么。
问题得到了部分解决,我将在这个站点上再次询问第二部分(apachecamel:我无法从主体中获取对象并对其进行转换)