Skip to content

Instantly share code, notes, and snippets.

@jacknie84
Created January 1, 2020 10:43
Show Gist options
  • Save jacknie84/70bf7ba5387d7f0a9af2295b1bbda30c to your computer and use it in GitHub Desktop.
Save jacknie84/70bf7ba5387d7f0a9af2295b1bbda30c to your computer and use it in GitHub Desktop.
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