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有效负载是在其余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规范,但我无法找到任何库来处理响应。
答案 0 :(得分:2)
如果您想在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配置。为此,您可以创建使用ContextResolver
注释的接口Provider
的实现。
@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;
}
}
以下链接可以帮助您:
希望这有帮助, 亨利
答案 1 :(得分:0)
您必须为此实现自定义MessageBodyWriter
,以便为您的POJO生成与默认值不同的JSON有效负载。