I have a json payload like this:
{
"account": {
"sample_id": 1424876658095,
"parameters": [
{
"name": "email",
"value": "hello@xyz.com"
},
{
"name": "first_name",
"value": "FIRSTNAME"
},
{
"name": "last_name",
"value": "LASTNAME"
}
]
},
"assests": [ {
"tran_id": "1234567",
}]
}
上面的 json 负载是在 Rest API 调用的响应中生成的。 我想在 java 中处理这个响应以生成如下内容:
{
"account": {
"sample_id": 1424876658095,
"email_id": "hello@xyz.com",
"first_name": "FIRSTNAME",
"last_name": "LASTNAME",
},
"assets": [ {
"tran_id": "1234567",
}]
}
我正在使用 REST API 的 JAX-RS 规范,但我找不到任何库来处理响应。
最佳答案
如果您想在 JAX-R 中利用 Jackson 序列化,则需要实现为自定义序列化程序。
有两个步骤可以做到这一点:
创建自定义序列化程序
这里是一个基于 bean
AccountBean
和ParameterBean
的自定义 Jackson 序列化器示例,可满足您的需求:public class AccountBeanSerializer extends JsonSerializer<AccountBean> { @Override public void serialize(AccountBean accountBean, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { jgen.writeStartObject(); jgen.writeNumberField("sample_id", accountBean.getSampleId()); List<ParameterBean> parameters = accountBean.getParameters(); for (ParameterBean parameterBean : parameters) { jgen.writeStringField(parameterBean.getName(), parameterBean.getValue()); } jgen.writeEndObject(); } }
如果是这样的话,我假设您的回复属于该类别:
class ResponseBean field account = class AccountBean field sampleId (long) field parameters = class ParameterBean (...)
注册自定义序列化程序
然后,您需要在上下文解析器中提供自定义 Jackson 配置。为此,您可以创建使用
Provider
注释的接口(interface)ContextResolver
的实现。@Provider public class CustomJacksonConfig implements ContextResolver<ObjectMapper> { private ObjectMapper objectMapper; public JacksonConfig() { this.objectMapper = new ObjectMapper(); SimpleModule module = new SimpleModule("MyModule", new Version(1, 0, 0, null)); module.addSerializer(AccountBean.class, new AccountSerializer()); this.objectMapper.registerModule(module); } public ObjectMapper getContext(Class<?> objectType) { return objectMapper; } }
以下链接可以帮助您:
- http://www.baeldung.com/jackson-custom-serialization
- https://books.google.fr/books?id=cFBptKRXrk4C&pg=PA81&lpg=PA81&dq=jaxrs+ContextResolver&source=bl&ots=FlOzDeookf&sig=iY0dM8l5A0svwxB-hsfFO94eIqc&hl=fr&sa=X&ei=B5vwVKSmO8bbat2BguAB&ved=0CEkQ6AEwBQ#v=onepage&q=jaxrs%20ContextResolver&f=false
- https://github.com/FasterXML/jackson-jaxrs-json-provider
希望这有帮助, 蒂埃里
关于java - 使用 JAX-RS 处理 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28753109/