Hier ist eine Lösung für Ihr Problem mit benutzerdefinierten JsonSerializer. Schritte werden von diesem blog post gefolgt.
Erstellen eines benutzerdefinierten Serializer
public class MaskingSerializer extends JsonSerializer <MyBean> {
@
Override
public void serialize(MyBean value, JsonGenerator jGen, SerializerProvider serializers) throws IOException, JsonProcessingException {
jGen.writeStartObject();
Field[] fields = value.getClass().getDeclaredFields();
for (Field field: fields) {
field.setAccessible(true);
MaskSensitiveData mask = field.getDeclaredAnnotation(MaskSensitiveData.class);
try {
if (mask != null) {
field.setAccessible(true);
field.set(value, field.get(value).toString().replaceAll(".", "*"));
}
jGen.writeStringField(field.getName(), field.get(value).toString());
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
jGen.writeEndObject();
}
}
Erstellen Sie ein Modul der Serializer
public class MaskingModule extends SimpleModule {
private static final String NAME = "CustomIntervalModule";
private static final VersionUtil VERSION_UTIL = new VersionUtil() {};
public MaskingModule() {
super(NAME, VERSION_UTIL.version());
addSerializer(MyBean.class, new MaskingSerializer());
}
}
Registrieren Sie das Modul mit ObjectMapper zu bündeln.
public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper() {
registerModule(new MaskingModule());
}
}
Testen Sie den Code
public class MyBeanTest {
private static final CustomObjectMapper OBJECT_MAPPER =
new CustomObjectMapper();
@Test
public void testIntervalSerialization() throws Exception {
MyBean mb = new MyBean();
mb.setAbc("value");
mb.setCardNumber("4441114443335551");
mb.setUserName("User");
mb.setXyz("value");
String result = OBJECT_MAPPER.writeValueAsString(mb);
System.out.println(result);
String expected = "{\"userName\":\"User\",\"cardNumber\":\"****************\",\"abc\":\"value\",\"xyz\":\"value\"}";
Assert.assertEquals(expected, result);
}
}
Dieses so lange in Ordnung ist, da alle Attribute vom Typ String sind. Wenn du abc als komplexeren Typ mit seinen eigenen Attributen haben würdest, wie würdest du sie als json drucken? Ich habe auch dieses Problem und kenne die Lösung noch nicht ... – dune76
https://Stackoverflow.com/q/46021769/5667890 das ist mein aktuelles Problem und ich habe immer noch keine Ahnung – dune76