Я использую com.fasterxml.jackson.databind.node.ObjectNode в своем java-rest, чтобы вернуть простое значение:
@POST
@Path ("/JsonApi")
@Consumes("application/json")
@Produces("application/json")
public ObjectNode postEmployee(JSONObject jsonObject)throws Exception{
String onlineUrl = MatafConfig.getConfigParam(request,
m_CONFIG_REDIRECT);
if (m_mapper == null)
m_mapper = new ObjectMapper();
ObjectNode jNode = m_mapper.createObjectNode();
jNode.put("url", onlineUrl); // debug shows {"url": "/mySite"}
//return url
return jNode;
}
Значение в jNode, как и ожидалось, {"url": "/mySite"}, но на стороне клиента он показывает другой json -
{"nodeType":"OBJECT","valueNode":false,"containerNode":true,"missingNode":false,"array":false,"object":true,"pojo":false,"number":false,"integralNumber":false,"floatingPointNumber":false,"short":false,"int":false,"long":false,"float":false,"double":false,"bigDecimal":false,"bigInteger":false,"textual":false,"boolean":false,"null":false,"binary":false}
Я понятия не имею об этом json, я думаю, что это какой-то объект по умолчанию из jax-rs.
Подробнее: java 8, jackson 2.6, с использованием библиотек jax-rs WebSphere 8.5 по умолчанию.




Кажется, что когда вы передаете ObjectNode в качестве возвращаемого параметра, Джексон десериализует ObjectNode, а не его содержимое. Итак, вместо того, чтобы возвращать ObjectNode, попробуйте создать класс, например, «Url», и вернуть его. Вот образец класса:
public class Url {
private String url;
public Url(final String url) {
this.url = url;
}
public String getUrl() {
return url;
}
}
Когда вы вернете его, он будет автоматически преобразован в представление JSON.