java - 使用 JAX-RS 处理 JSON 响应

标签 java json rest jackson jax-rs

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 AccountBeanParameterBean 的自定义 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;
        }
    }
    

以下链接可以帮助您:

希望这有帮助, 蒂埃里

关于java - 使用 JAX-RS 处理 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28753109/

相关文章:

java - 终身 Collection 无明显原因启动

php - 使用 IOS 解析基本的 JSON

java - 用java解析json

java - 如何使用 Jersey Client 针对 WS 上的 Spring Security 进行身份验证

rest - 带有许多参数的 "long"GET 请求

java - 在 Eclipse 中的 Java 项目中搜索数字

java - 有什么好的 hive 插件教程吗?

api - Office365 日历 REST Api 中日历 View 端点每页返回的最大事件数是多少?

java - HQL 子字符串最后 x 个字符

javascript - 如何通过javascript将json显示为html