2016-03-31 27 views
0

Java 5'ten Java 1.7'ye geçiş yapan bir java geliştiricisiyim ve bunun mümkün olduğunu bilmeden bazı kodlara bakıyorum.Aynı dinlenme bitiş noktası olan iki java yöntemi

@Path("/myroot") 
@Service 
public class MyServiceClass { 

@POST 
@Produces({ "application/x-protobuf" }) 
@Path("bookid/{bookNumber}") 
public Response findBookByBookId(
    @PathParam("bookNumber") String bookNumber, 
    @QueryParam("searchType") String searchType) { 
    return ... 
} 

@POST 
@Produces("application/json") 
@Path("bookid/{bookNumber}") 
public Response findBookByBookIdAsJson(
    @PathParam("bookNumber") String bookNumber, 
    @QueryParam("searchType") String searchType) { 
    return ...; 
} 

Burada aynı dinlenme bitiş noktası olan iki yöntem var. Tek fark, farklı reson türlerini üretmeleridir.

Arayan uygulama rootUrl/bookId/1234'ü çağırıyorsa, bu, java'nın yanıt türüne göre hangi yöntemin çağrılacağını bilecek kadar akıllı görünüyor.

Doğru muyum? Birisi bunu anlamama yardımcı olabilir.

sayesinde

+4

İstekte bulunan istemci, başlıkta beklediği yanıt türünü belirleyebilmelidir. Uygulama/x-protobuf' beklenen yanıt ise, hizmet sadece hangi yöntemi çağırmak için biliyor olabilir. Üstbilgide beklenen yanıt belirtilmezse ne olacağından emin değilim (belki 'uygulama/json' varsayılan veya bir şey olur) – ochi

+0

İstemcinin almak istediği istekte belirtmek için kullanılacak üstbilgi "kabul et" başlık – ochi

cevap

1

nokta çağırma Accept başlık tarafından belirlenecektir istirahat

curl -v -H "Accept: application/json" --data "param1=value1&param2=value2" http://<Server>/bookid/{bookNumber} 

@POST 
@Produces("application/json") 
@Path("bookid/{bookNumber}") 
public Response findBookByBookIdAsJson(
    @PathParam("bookNumber") String bookNumber, 
    @QueryParam("searchType") String searchType) { 
    return ...; 
} 

ve

curl -v -H "Accept: application/x-protobuf" --data "param1=value1&param2=value2" http://<Server>/bookid/{bookNumber} 

çağırır çağırır

@POST 
@Produces({ "application/x-protobuf" }) 
@Path("bookid/{bookNumber}") 
public Response findBookByBookId(
    @PathParam("bookNumber") String bookNumber, 
    @QueryParam("searchType") String searchType) { 
    return ... 
} 
1

hiçbir Java dili ağır basan veya aşırı oluyor burada bulunmaktadır. Yöntemlerin farklı isimleri vardır.

Sorunuz, sunucu yolu yönlendirme istekleriyle ilgilidir ve istekleri bir dizi faktöre göre yönlendirir. Bu faktörlerden biri, uzak isteğin accept başlığında belirtilen ortam türleriyle eşleşen @Produces değeri olabilir.

+0

Evet. Bunun için teşekkürler. Bunu fark ettim ve dolayısıyla mesajın başlığını hızlı bir şekilde değiştirdim. Ama belki de başlıktaki değişikliği görmeden önce cevapladın. Nether daha az cevap için teşekkür ederim. cevabın geri kalanı kesinlikle hangi tipin çağrıldığını medya türünün belirlediği şüphemle teyit eder. – Richie

İlgili konular