Created
January 1, 2020 10:43
-
-
Save jacknie84/70bf7ba5387d7f0a9af2295b1bbda30c to your computer and use it in GitHub Desktop.
This file contains hidden or 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
data class Search( | |
var bounds: Bounds?, | |
var orders: List<Order>?, | |
var filters: List<Map<String, List<Map<Operator, String>>>>? | |
) | |
data class Bounds( | |
var limit: Long = 0, | |
var offset: Long = Long.MAX_VALUE | |
) | |
data class Order( | |
var property: String? = null, | |
var direction: Direction? = null, | |
var nulls: Nulls? = null | |
) | |
enum class Direction { | |
ASC, DESC | |
} | |
enum class Nulls { | |
FIRST, LAST | |
} | |
enum class Operator { | |
EQ, NE, IN, SW, EW, IC, EC, LT, LE, GT, GE | |
} | |
@Component | |
class RequestParamJsonHandlerMethodArgumentResolver: HandlerMethodArgumentResolver { | |
@Autowired | |
private lateinit var objectMapper: ObjectMapper | |
override fun supportsParameter(parameter: MethodParameter): Boolean { | |
return parameter.hasParameterAnnotation(RequestParamJson::class.java) | |
} | |
override fun resolveArgument(parameter: MethodParameter, container: ModelAndViewContainer?, request: NativeWebRequest, factory: WebDataBinderFactory?): Any? { | |
val requestParamJson = parameter.getParameterAnnotation(RequestParamJson::class.java) | |
val name = requestParamJson?.name ?: throw IllegalStateException("Assertion Error") | |
val required = requestParamJson?.required ?: false | |
var paramValue = name?.let { | |
val value = if (required) { | |
request.getParameter(it) | |
?: throw MissingServletRequestParameterException(name, parameter.nestedParameterType.simpleName) | |
} else { | |
request.getParameter(it) ?: "{}" | |
} | |
value.trim() | |
} | |
paramValue = if (paramValue.length > 0 ) { | |
paramValue | |
} else { | |
"{}" | |
} | |
return objectMapper.readValue(paramValue, parameter.parameterType) | |
} | |
} | |
@Target(AnnotationTarget.VALUE_PARAMETER) | |
@Retention(AnnotationRetention.RUNTIME) | |
@MustBeDocumented | |
annotation class RequestParamJson(val name: String, val required: Boolean) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment