首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理Ratpack Context.parse执行

处理Ratpack Context.parse执行
EN

Stack Overflow用户
提问于 2018-08-23 18:55:24
回答 1查看 256关注 0票数 0

我正在使用Ratpack框架用Kotlin编写一个API,使用Jackson来反序列化JSON请求体。当我发送一个无效的请求正文时,我的应用程序抛出一个500内部服务器错误异常:

代码语言:javascript
复制
import com.google.inject.Inject
import com.mycompany.mynamespace.MyComponent
import ratpack.func.Action
import ratpack.handling.Chain
import java.util.UUID

class MyTestEndpoint @Inject constructor(
    private val myComponent: MyComponent) : Action<Chain> {

  override fun execute(chain: Chain) {
    chain
        .post { ctx ->
          ctx.parse(MyParams::class.java)
              .map { parsedObject -> myComponent.process(parsedObject) }
              .then { ctx.response.send() }
        }
  }
}

data class MyParams(val borrowingId: UUID)

当使用无效的请求正文命中此终结点时,异常为:

代码语言:javascript
复制
com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException: Instantiation of [simple type, class com.mycompany.mynamespace.MyParams] value failed for JSON property borrowingId due to missing (therefore NULL) value for creator parameter borrowingId which is a non-nullable type

我有一个通用的错误处理程序,它检查抛出的异常的类型,并返回适当的状态。但在这种情况下,检查MissingKotlinParameterException并返回400个错误请求是没有意义的,因为在其他情况下可能会抛出此异常。

此外,我可以在ctx.parse行后面添加onError,但这将是一个很大的ctx.parse,并且在每个处理程序中实现它并不遵循使用通用错误处理程序来保持API一致性的模式。有没有办法让Ratpack在解析失败时抛出一个特定的异常(比如ParseFailedException),这样我就可以捕捉到它并返回一个400错误的请求?

EN

回答 1

Stack Overflow用户

发布于 2018-08-23 23:06:02

作为一种变通方法,我编写了一个扩展方法:

代码语言:javascript
复制
fun <T: Any> Context.tryParse(type: Class<T>): Promise<T> {
    return parse(type)
        .onError { ex -> throw BadRequestException(ex) }
}

其中,我的通用错误处理程序捕获BadRequestException,并将响应状态设置为400

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51984155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档