Created
May 12, 2022 07:49
-
-
Save sgrimm/b2a548eafc253588370b3e130a85f497 to your computer and use it in GitHub Desktop.
Quick-and-dirty proof of concept for overriding JobRunr JSON mapper visibility settings
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example | |
import com.fasterxml.jackson.databind.ObjectMapper | |
import com.fasterxml.jackson.databind.introspect.AnnotatedField | |
import com.fasterxml.jackson.databind.introspect.AnnotatedMember | |
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod | |
import com.fasterxml.jackson.databind.introspect.VisibilityChecker | |
import java.lang.reflect.Field | |
import java.lang.reflect.Member | |
import java.lang.reflect.Method | |
import java.lang.reflect.Modifier | |
import javax.annotation.ManagedBean | |
import org.jobrunr.utils.mapper.jackson.JacksonJsonMapper | |
@ManagedBean | |
class JobRunrJsonMapper : JacksonJsonMapper() { | |
override fun initObjectMapper( | |
objectMapper: ObjectMapper, | |
moduleAutoDiscover: Boolean | |
): ObjectMapper { | |
val mapper = super.initObjectMapper(objectMapper, moduleAutoDiscover) | |
val checker = CustomVisibilityChecker(mapper.visibilityChecker) | |
return mapper.setVisibility(checker) | |
} | |
class CustomVisibilityChecker<T : VisibilityChecker<T>>( | |
private val defaultChecker: VisibilityChecker<T> | |
) : VisibilityChecker<T> by defaultChecker { | |
private fun isCustom(clazz: Class<*>) = clazz.packageName.startsWith("com.example") | |
override fun isFieldVisible(f: Field): Boolean = | |
!isCustom(f.declaringClass) && defaultChecker.isFieldVisible(f) | |
override fun isFieldVisible(f: AnnotatedField): Boolean = isFieldVisible(f.annotated) | |
override fun isGetterVisible(m: Method): Boolean { | |
return if (isCustom(m.declaringClass)) Modifier.isPublic(m.modifiers) | |
else defaultChecker.isGetterVisible(m) | |
} | |
override fun isGetterVisible(m: AnnotatedMethod): Boolean = isGetterVisible(m.annotated) | |
override fun isIsGetterVisible(m: Method): Boolean = isGetterVisible(m) | |
override fun isIsGetterVisible(m: AnnotatedMethod): Boolean = isGetterVisible(m) | |
override fun isCreatorVisible(m: Member): Boolean { | |
return if (isCustom(m.declaringClass)) Modifier.isPublic(m.modifiers) | |
else defaultChecker.isCreatorVisible(m) | |
} | |
override fun isCreatorVisible(m: AnnotatedMember): Boolean = isCreatorVisible(m.member) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment