2015-01-03 10 views
6

Spring ile çok uzun bir ilişkiden sonra Dropwizard'a dönmeye karar verdim. Çabuk barebone REST hizmetini hemen oluşturdum ve sorunsuz çalışıyor.Basit Dropwizard 0.7.1 Uygulama Opsiyonel QueryParam Üzerinden Başarısız Oldu Java/Java 8

Ancak Dropwizard kullanıcı kılavuzunda önerildiği şekilde Dropwizard 0.7.1 ve Java 1.8 kullanma

, sadece POM girişleri olarak, dropwizard çekirdekli bağımlılık ve Java 1.8, zorlamak için maven derleyici eklentisi olan

INFO [2015-01-03 17:44:58,059] io.dropwizard.jersey.DropwizardResourceConfig: The following paths were found for the configured resources: 

    GET /(edge.dw.sample.controllers.IndexController) 

ERROR [2015-01-03 17:44:58,158] com.sun.jersey.spi.inject.Errors: The following errors and warnings have been detected with resource and/or provider classes: 
SEVERE: Missing dependency for method public java.lang.String edge.dw.sample.controllers.IndexController.index(java.util.Optional) at parameter at index 0 
Exception in thread "main" javax.servlet.ServletException: [email protected]30103b7==com.sun.jersey.spi.container.servlet.ServletContainer,1,false 

aşağıdaki denetleyicisi kod gibidir:

temel denetleyiciye bir Opsiyonel QueryParam eklemeyi deneyin en kısa sürede, uygulama aşağıdaki hata (kısalık için kesim) ile başlatma başarısız
@Path("/") 
public class IndexController { 

    @GET 
    @Timed 
    public String index(@QueryParam("name") Optional<String> name) { 
     String saying = "Hi"; 

     if(name != null && name.isPresent()) { 
      saying += " " + name.get(); 
     } 

     return saying; 
    } 
} 

Opsiyonel'i karışımdan kaldırırsam, uygulama düzgün çalışır. İsteğe bağlı özel kodu null çekler ile değiştiririm ve mükemmel çalışır.

Burada temel bir şey eksik miyim? Hem Google Guava Optional hem de java.util.Optional, aynı hatayla başarısız.

Hızlı bir Google SO yararlı hiçbir şey vermiştir araması/(Ve evet, Opsiyonel nesnesine dar aşağı yaptım) ama önceden

Teşekkür kaçırmış olabilir bir kaynak bana gelin çekinmeyin!

cevap

11

Bunu yayınladıktan sonra, sorunun Java 1.8 kullanımı olduğunu gördüm.

@Override 
public void initialize(Bootstrap<SampleConfiguration> bootstrap) { 
    bootstrap.addBundle(new Java8Bundle()); 
} 

Bkz: https://github.com/dropwizard/dropwizard-java8

Uygulama sınıfında

<dependency> 
    <groupId>io.dropwizard.modules</groupId> 
    <artifactId>dropwizard-java8</artifactId> 
    <version>0.7.0-1</version> 
</dependency> 

Ve kod:

POM Entry: Java 1.8 kullanıyorsanız, benim app Java8Bundle eklemek zorunda Bu, hem Google Guava Optional hem de java.util.Optional'ın gayet iyi çalışmasını sağlar.

Java 1.7'ye geri dönersem ve Google Guava İsteğe Bağlı seçeneğini kullanırsam, gayet iyi çalışır ve Java8Bundle'ı eklemem gerekmez. Java8 özellikleri kullanmak benim için kazançlı olsa da, şimdilik Java8Bundle'ı tercih edeceğim :)

Şerefe!

+0

Guava İsteğe bağlı varsayılan olarak dropwizard tarafından işlenir, sadece FYI. Cevabı işaretlemeyi unutma. – Natan

+0

Teşekkür ederim, bu karışık bir hata ayıklama 45 dakikalık bir maceraydı. – Joe

İlgili konular