JAX-RS

2013-07-31 15 views
5

'daki bir JSON isteğinden basit JSON Parametresi alın Istemci/tarayıcı, geri kalan kaynağım için bir JSON isteği yapar (isteğin içerik türü application/json ve karşılık gelen REST yöntemi @Consumes("application/json") açıklamalıdır).JAX-RS

@Path("/process-something") 
@POST 
@Produces("application/json") 
@Consumes("application/json") 
@HandleDefaultExceptions 
public AResponse processSomething(List<Long>) { 

} 

JSON gövdesi List<Long> veya String gibi bazı basit türleri, oluşur.

application/x-www-form-urlencoded talebi durumunda @FormParam'a benzer şekilde JSON parametrelerini yalnızca bir şekilde ekleyerek enjekte etmenin basit bir yolu var mıdır? JSON String'in ObjectMapper veya Jettison'un JSONObject ile çözülmesinden daha kolay çözümler istiyorum.

+0

jaxrs uygulanması için kullanan sizi ne çerçeve?, Tek ek açıklama yeterli olmasa da JSON desteği sunan birçok çerçeveler vardır, uygun sağlayıcıları haritaya var ama büyük bir anlaşma değil şu olacaktır. Jersey, Apache CXF – Sikorski

+0

Jersey'i kullanıyorum. Umarız Mapping ile ObjectMapper'in veya nesnenin diğer bazı örneklerinin yaratılması anlamına gelmez (sorunun son bölümüne bakın) ... –

+1

no: web.xml veya başka bir yapılandırma dosyasında bir giriş sağlamanız gerektiği anlamına gelir jersey json desteğini kullanacak. bunu görün: https://jersey.java.net/documentation/latest/media.html#json - Ve bunlar daha kolay çözümler! – Sikorski

cevap

4

JSON nesnesinin veri modelini yansıtan ve JAXB @XmlRootElement ile ek açıklama ekleyen bir Java sınıfı oluşturabilirsiniz. Sen .:, @XmlElement ek açıklamalarla örneğin özel JSON anahtar ismine özelliklerini haritalayabilirsiniz

@XmlRootElement 
public class MyJSONOject{ 
    @XmlElement(name="json-key-name") 
    public String attribute; 
} 

Sonra Jersey şeffaf ve işte sizin için JSON nesnesi deşifre edebilir!

@Path("/process-something") 
@POST 
@Produces("application/json") 
@Consumes("application/json") 
public AResponse processSomething(MyJSONOject json) { 
    log.fine(json.attribute); 
} 
+1

Daha kolay bir yol beklediğim halde (örneğin, bir açıklama ile enjekte edilen parametrenin alınması) (cevaba bakın), bunu bir cevap olarak işaretliyorum, çünkü bu, Jackson ile manuel olarak kod çözmekten daha iyi bir çözüm. –

1

this documentation'a göre, bir isteğin parametrelerini ayıklamak için kullanılan 6 parametre tabanlı ek not vardır ve hiç kimse JSON parametreleri için görünmüyor.

+0

bunu neden bir cevap olarak yazdınız? – Sikorski

+1

Çünkü bu cevap olabilir ... en azından JSON parametresini ayıklayan JAX-RS standardında bir ek açıklama yoktur. –

+0

Sadece ne düşünüyorsun @Consumes ("application/json")? – Sikorski

İlgili konular