2017-11-12 5 views
0

私はプレイスカラアプリケーションを開発していますが、ロケールが見つからないと例外がスローされます、私の問題はメッセージが郵便配達人に表示されていません例外が発生した後、ここに私のコード新しい例外をスローするとポストマンのレスポンスに何も表示されない

class LocaleFilter @Inject()(implicit val mat: Materializer, ec: ExecutionContext) extends Filter { 

    def apply(nextFilter: RequestHeader => Future[Result]) 
      (requestHeader: RequestHeader): Future[Result] = { 

    val startTime = System.currentTimeMillis 
    val localeIndex = requestHeader.path.indexOf("v1") + 3 
    val localeRequest = requestHeader.path.replace("//", "/").split("/")(3); 
    if (!isExistingLocale(localeRequest)) { 
     throw new CustomException("Locale not found") 
    } 
    nextFilter(requestHeader).map { result => 

     val endTime = System.currentTimeMillis 
     val requestTime = endTime - startTime 

     Logger.info(s"${requestHeader.method} ${requestHeader.uri} took ${requestTime}ms and returned ${result.header.status}") 

     result.withHeaders("Request-Time" -> requestTime.toString) 
    } 


    } 

    def isExistingLocale(locale: String): Boolean = { 

    val properties = ConnectionLoader.getConnectionProperties(locale); 
    return null != properties; 

    } 

    case class CustomException(private val message: String = "", 
          private val cause: Throwable = None.orNull) 
    extends Exception(message, cause) 

} 

であり、ここでenter image description here

ポストマン結果はロケールたが見逃しているが見つからないれるべき郵便配達の結果であり、コードは500である理由私は考えているはず細かいです。

+0

実際にあなたが(副作用である)例外を必要としません。あなたは'return InternalServerError(«ロケールが見つかりません»)で '新しいCustomException(«ロケールが見つかりません»)'を置き換えることができます – Dnomyar

+0

@Donmyarによって何ですか? –

+0

私はコメント – Dnomyar

答えて

1

yoを解決するにはあなたは特性Resultsを使用することができます(私はそれが最善の解決策であるかわかりません)。ここでは、フィルタのexempleです:

import akka.stream.Materializer 
import javax.inject._ 
import play.api.mvc._ 
import scala.concurrent.{ExecutionContext, Future} 

@Singleton 
class ExampleFilter @Inject()(
    implicit override val mat: Materializer, 
    exec: ExecutionContext) extends Filter with Results { // added `with Results` to be able to use `InternalServerError` 

    override def apply(nextFilter: RequestHeader => Future[Result]) 
      (requestHeader: RequestHeader): Future[Result] = { 
    // ... 

    if(/* ... */){ 
     return Future.successful(InternalServerError("Locale not found")) 
    } 

    // ... 

    nextFilter(requestHeader).map { result => 
     // ... 
    } 
    } 

} 

カール右のメッセージで500を返します。

$ curl -v http://localhost:9000 
* Rebuilt URL to: http://localhost:9000/ 
* Trying ::1... 
* TCP_NODELAY set 
* Connected to localhost (::1) port 9000 (#0) 
> GET/HTTP/1.1 
> Host: localhost:9000 
> User-Agent: curl/7.54.0 
> Accept: */* 
> 
< HTTP/1.1 500 Internal Server Error 
< Content-Length: 16 
< Content-Type: text/plain; charset=utf-8 
< Date: Sun, 12 Nov 2017 13:31:43 GMT 
< 
* Connection #0 to host localhost left intact 
Locale not found% 
+0

あなたの応答をありがとう、internalServerErrorは解決されていません:/それはインポートが必要ですか? –

+0

'with Results'を追加しましたか? (私は不足している輸入品を追加するために編集しました) – Dnomyar

+0

それはあなたに感謝を働かせます:) –

関連する問題