当前位置: 首页 > 知识库问答 >
问题:

如何从POJO中删除字段

仲浩旷
2023-03-14
public class user {

    private String planId;

    private String eid;

    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private Collection<String> userIds;

}

我有一个像上面一样的pojo

用于创建json请求对象的代码如下:

    public UserCollection getUserCollection(final user args) {
            Map<String, String> headersMap = new HashMap<>();
            ObjectMapper jacksonMapper = new ObjectMapper();
            jacksonMapper.disable(MapperFeature.USE_ANNOTATIONS); // this line is creating the userIds field to reflect
 //By any code we can remove the userId field from the args object
    
            String responseBody = null;
            String responseStatus = null;
                String jsonRequestBody = jacksonMapper.writeValueAsString(args);
    }

我只是想通过不删除任何上述代码从args中删除userIds。

提前谢谢。

共有1个答案

徐奇
2023-03-14

我不知道如何在不删除注释处理代码的情况下解决这个问题,您可能应该添加一个自定义序列化程序。你可以在这里进一步了解这个话题。

public class HelloWorld {

    public static void main(String[] args) throws JsonProcessingException {
        User myItem = new User("planId", "eId", List.of("1", "2"));
        ObjectMapper mapper = new ObjectMapper();

        SimpleModule module = new SimpleModule();
        module.addSerializer(User.class, new UserSerializer());
        mapper.registerModule(module);

        String serialized = mapper.writeValueAsString(myItem);
    }

    @Data
    @AllArgsConstructor
    public static class User {

        private String planId;
        private String eId;
        private Collection<String> userIds;
    }

    public static class UserSerializer extends StdSerializer<User> {

        public UserSerializer() {
            this(null);
        }

        public UserSerializer(Class<User> t) {
            super(t);
        }

        @Override
        public void serialize(User value, JsonGenerator gen, SerializerProvider provider) throws IOException{

            gen.writeStartObject();
            gen.writeStringField("planId", value.planId);
            gen.writeStringField("eId", value.eId);
            gen.writeEndObject();
        }
    }
}

如果必须在没有注释的情况下使用它,并且无法添加自定义序列化程序,那么应该将用户类映射到没有相关字段的更具体的类中,然后序列化该类。

 类似资料:
  • 问题内容: 从字典中删除键时,我使用: 有没有一种方法可以做到这一点? 问题答案: 要删除键而不管它是否在字典中,请使用以下两个参数的形式: 如果典中存在,则返回,None否则返回。如果第二个参数未指定(即)并且key不存在,则引发a。 要删除肯定存在的密钥,你还可以使用 如果关键字在字典中不存在,则会引发 。

  • 从字典中删除键时,我使用: 有没有一个简单的方法可以做到这一点?

  • 问题内容: 我有绳子。 如何在离开字符串的同时从字符串中删除? 问题答案: 对于所有要丢弃的事件,请使用: PS:replace函数返回一个新字符串,并使原始字符串保持不变,因此在replace()调用之后使用该函数的返回值。

  • 我有一个字符串。 在保留的同时,如何从字符串中删除?

  • 问题内容: 我想删除特殊字符,例如: 使用Java从String中获取。 问题答案: 这取决于你定义为特殊字符的内容,但是请尝试: 请注意,该^字符不能是列表中的第一个字符,因为你要么必须对其进行转义,否则将意味着“除这些字符外的任何字符”。 另一个注意事项:-字符必须是列表中的第一个或最后一个,否则你必须对其进行转义,否则它将定义一个范围(例如,表示“ 范围内的所有字符” )。 所以,为了保持一

  • 问题内容: 我想从我的字符串中删除以下所有字符 “> [],-” 目前我正在这样做。但必须有一个更有效的方法 问题答案: 使用描述要替换的所有字符的正则表达式,以及替换与该正则表达式匹配的所有内容的方法: (编辑:实际上,我认为不应该转义。而且我忘记了将反斜杠加倍,因为它们会被解释两次:一次是由Java编译器,一次是由正则表达式引擎。)