Scala 请求参数的喷洒-验证错误不会导致状态代码400-badRequest

Scala 请求参数的喷洒-验证错误不会导致状态代码400-badRequest,scala,spray,spray-dsl,Scala,Spray,Spray Dsl,我有以下喷洒路线 post { parameters(('adId.as[String], 'propertyType.as[TypNe])).as(Import){imp => complete { adImporterService ! imp StatusCodes.Accepted } } } 用于转换为Java枚举类型的自定义反序列化程

我有以下喷洒路线

      post {
        parameters(('adId.as[String], 'propertyType.as[TypNe])).as(Import){imp =>
          complete {
            adImporterService ! imp
            StatusCodes.Accepted
          }
        }
      }
用于转换为Java枚举类型的自定义反序列化程序:

  implicit val propertyTypeDeserializer = new Deserializer[String,TypNe]{
    def apply(s:String):Deserialized[TypNe]={
      Try(TypNe.valueOf(s.toUpperCase)) match {
        case Success(tn) => Right(tn)
        case Failure(ex) => Left(MalformedContent(s"Wrong property type. Accepted values: ${TypNe.values}", Some(ex)))
      }
    }
  }
导入案例类定义如下:

  case class Import(adId: String, propertyType:TypNe){
    require(adId!= null && !adId.isEmpty && propertyType!=null,"adId parameter cannot be null or empty and propertyType has to be defined")
  }
期望的行为是将抛出的IllegarArgumentException绑定到响应代码400-BadRequest。但我得到的响应代码是500-内部服务器错误

我使用的是默认的RejectionHandler

  class MainService(route: Route) extends HttpServiceActor {
    implicit val system = context.system

    import spray.routing.RejectionHandler.Default

    override def receive: Receive = runRoute(route)
  }
使用默认ExceptionHandler-将非致命异常转换为InternalServer错误

实现理想行为的最佳实践是什么

在我看来,创建自定义ExceptionHandler是一种不正确的方法。我可能需要在parameters指令中实现从IllegalArgumentException到格式错误的QueryParamRejection的转换

有人能给出一个如何实现它的提示吗

Thx

更新: 尝试了不同的方法,但也没有达到预期效果

post {
            parameters(('adId.as[String], 'propertyType.as[String])) { (id,pT) =>
              validate(Try(TypNe.valueOf(pT)).isSuccess,s"propertyType $pT is not a valid ${TypNe.values()}")
              validate(id!= null && !id.trim.isEmpty,"adId parameter cannot be null or empty ")
              complete {
                adImporterService ! Import(id, TypNe.valueOf(pT))
                StatusCodes.Accepted
              }
            }
          }