Skip to content

Commit

Permalink
refactor: separate validation from controller #46
Browse files Browse the repository at this point in the history
ohsome-contributions-stats-service: 'Consider introducing 'Jakarta Bean validation' standard '
#46
  • Loading branch information
mmerdes committed Feb 5, 2024
1 parent 2186dd8 commit fdb5db4
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,12 @@ package org.heigit.ohsome.now.statsservice.topic
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.Parameter
import jakarta.servlet.http.HttpServletRequest
import jakarta.validation.*
import org.heigit.ohsome.now.statsservice.*
import org.heigit.ohsome.now.statsservice.utils.validateIntervalString
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.http.HttpStatus.BAD_REQUEST
import org.springframework.validation.annotation.Validated
import org.springframework.web.bind.annotation.*
import java.time.Instant
import kotlin.reflect.KClass


@CrossOrigin
Expand Down Expand Up @@ -136,29 +133,5 @@ class TopicController {
return buildOhsomeFormat(result, httpServletRequest)
}

@Target(AnnotationTarget.VALUE_PARAMETER)
@Retention(AnnotationRetention.RUNTIME)
@Constraint(validatedBy = [ValidTopicsCheck::class])
annotation class ValidTopics(
val message: String = "Topic not valid",
val groups: Array<KClass<*>> = [],
val payload: Array<KClass<out Payload>> = []
)

class ValidTopicsCheck : ConstraintValidator<ValidTopics?, List<String>> {
override fun isValid(topics: List<String>, context: ConstraintValidatorContext?): Boolean {
return areTopicsValid(topics)
}
}


@ControllerAdvice
class YourControllerAdvice {
@ResponseBody
@ResponseStatus(BAD_REQUEST)
@ExceptionHandler(ConstraintViolationException::class)
fun handleConstraintViolationException() {
// Intentionally left blank
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.heigit.ohsome.now.statsservice.topic

import jakarta.validation.Constraint
import jakarta.validation.ConstraintValidator
import jakarta.validation.ConstraintValidatorContext
import jakarta.validation.Payload
import kotlin.reflect.KClass


@Target(AnnotationTarget.VALUE_PARAMETER)
@Retention(AnnotationRetention.RUNTIME)
@Constraint(validatedBy = [ValidTopicsCheck::class])
annotation class ValidTopics(
val message: String = "Topic not valid",
val groups: Array<KClass<*>> = [],
val payload: Array<KClass<out Payload>> = []
)


class ValidTopicsCheck : ConstraintValidator<ValidTopics?, List<String>> {
override fun isValid(topics: List<String>, context: ConstraintValidatorContext?): Boolean {
return areTopicsValid(topics)
}
}


0 comments on commit fdb5db4

Please sign in to comment.