jackson 从请求主体Sping Boot 中删除空属性

yks3o0rb  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(217)

我是spring Boot 的新手,正在参考this文章。它要求添加@JsonInclude(Include.NON_NULL)注解以从response body中删除空属性,但我对从request body中删除空属性感兴趣。请建议我如何实现这一点。
请求正文为:

{
    "userUuid": "2u9k2ld8f-ghj47dhj",
    "suggestion": null
}

并且请求DTO类为:

@Data
@NoArgsConstructor
public class UserRequestDTO implements Serializable {
    private String userUuid;
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String suggestion;
}

很明显,它对我不起作用。当我字符串化并打印请求主体时,它包括suggestion attr,即null。感谢您的帮助。

5jdjgkvh

5jdjgkvh1#

好吧......不要使用toString(),使用Jackson对象Map器。例如:

var objectMapper = new ObjectMapper();
var dto = objectMapper.readValue(JSON, UserRequestDTO.class);
var strNoNullFields = objectMapper.writeValueAsString(dto);

这样注解才能正常工作。
无论如何,这不是一个非常理想的问题,你可能需要重新考虑如何计算校验和(你的问题有点像XY-problem)。

b09cbbtk

b09cbbtk2#

我需要生成有效负载的校验和(不包括空属性)。我不想替换空属性,而想删除它。要生成签名,我将在请求主体上执行.toString()
我想你要找的请求具有动态属性。
请尝试在参数上使用HashMap<String,Object>
另一个简单的方法是覆盖DTO中的toString()并忽略空属性。
建议:除了使用这个只用于日志记录,我认为这两个都是坏的做法,可以更好地创建一个方法generateSignature()处理所有的规则。

相关问题