2014-11-20 8 views
5

Kısa tutmaya çalışacağım. Spark filtrelerini anlamaya çalışırken yaşadığım problem. Basit bir uygulama oluşturmaya çalışıyorum ve yapması gereken şeylerden biri, istemci her zaman bir http hatası görmek üzere olduğunda bir hata raporu oluşturmaktır. Benim app nasıl göründüğünü 404 veya 500. İşte: durumunu nitelik 0 olarak ayarlanır NedenseJava Spark'i, bir 404 oluştuğunda özel eylemi çalıştırmak için filtrelemeden sonra kullanın.

import static spark.Spark.*; 

public class MyApp { 
    public static void main(String[] args) { 
     get("/hello", (req, res) -> "{\"status\":\"OK\"}"); 

     after((request, response) -> { 
      if (response.raw().getStatus() == 404) { 
       // here run the code that will report the error e.g. 
       System.out.println("An error has occurred!!"); 
      } 
     }); 
    } 
} 

, response parametre vardır dokümantasyon ben, bu yüzden "after" filters are evaluated after each request and can read the request and read/modify the response dediğinde o 404. ayarlı mı diye kontrol ediyorum bir şekilde yapabilmeli (dokümanlar hatalı değilse).

Temel olarak, bir after filtresini kullanarak http hatalarını engellemeye çalışıyorum ancak yanıtı kontrol etmeye çalıştığımda beklediğim şeyi alamıyorum.

Aynı şeyi yapmanın farklı bir yolu veya bunun nasıl yapılacağı konusunda bir fikriniz var mı?

Teşekkürler.

cevap

6

Bunu joker karakterleri kullanarak çözdüm. after yöntemini çağırmak yerine, "*" yolunu bağlayan HTTP yöntemlerinin her biri için bir yol ekledim.

Main yönteminizin en altında olmanız önemlidir; böylece hiçbir rota çözülmezse, bunlar her zaman tetiklenir.

import static spark.Spark.*; 

public class MyApp { 
    public static void main(String[] args) { 
     get("/hello", (req, res) -> "{\"status\":\"OK\"}"); 

     get("*", (request, response) -> { 
      System.out.println("404 not found!!"); 
      // email me the request details ...  
     ); 
    } 
} 
+2

Bu şekilde statik dosya yükleme –

+0

Hayır, öldürmez, @KenBlock. Spark, rotaları çalıştırmadan önce tüm kaynak işleyicilerinden geçer. Bir iç/dış kaynak bulunursa, Spark bunu çıkarır ve geri döner. Bu spark.servlet.SparkFilter.doFilter https://github.com/perwendel/spark/blob/master/src/main/java/spark/servlet/SparkFilter.java#L109 –

+0

@TravisSpencer'de görülebilir. statik dosya yükleniyor ... ama 404'lerin çalışması ... çok yakın ... çalışan bir örneğiniz var mı? –

1

tercih edilen yollardan böyle olmazdı aradığınızı elde etmek için:

İşte bir örnek.

get("/hello", (request, response) -> { 
    // look up your resource using resourceId in request/path/query 
    // oh dear, resource not found 
    throw new NotFoundException(resourceId); 
}); 

exception(NotFoundException.class, (e, request, response) -> { 
    response.status(404); 
    response.body(String.format("Resource {%s} not found", e.getResourceId())); 
    // doReporting here. 
}); 

public class NotFoundException extends Exception { 
    private final String resourceId; 
    public NotFoundException(String resourceId) { 
     this.resourceId = resourceId; 
    } 

    public String getResourceId() { 
     return resourceId; 
    } 
} 
+0

bir resourceId kullanarak gerçek kod sözdizimi ... Bu belgeyi –

+0

ResourceId ve etki alanına özel Exception sınıf NotFoundException, Spark-Java değil, etki alanınıza özgü olduğunu bulamıyorum. –

+0

Spark-Java'ya özgü olan, her bir özel durum türü için tutarlı bir yanıt sağlayan özel durum paradigmasıdır. Tek tartışma, bu istisnaların iyi bir kullanımıdır; Yani, kaynak istisnai bir durum bulunamadı veya beklenen bir cevaptır. –

İlgili konular