2012-11-20 53 views
0

這裏是我的資源類:如何指導Jersey在動態bean中查找屬性?

DynamicBeanResource.java

@Path("/") 
public class DynamicBeanResource { 
    @GET 
    @Path("/{entity}.xml/{id}") 
    @Produces(MediaType.APPLICATION_XML) 
    public DynamicBean getAsXML(@PathParam("entity") String entity, @PathParam("id") String id) { 
     //Retrieve bean 
     DynamicBean b=getDynamicBean(); 

     // How can I tell Jersey how to find the properties of the bean ? 
    } 

    @GET 
    @Path("/{entity}.json/{id}") 
    @Produces(MediaType.APPLICATION_JSON) 
    public DynamicBean getAsJSON(@PathParam("entity") String entity, @PathParam("id") String id) { 
     //Retrieve bean 
     DynamicBean b=getDynamicBean(); 

     // How can I tell Jersey how to find the properties of the bean ? 
    } 
} 

DynamicBean.java

public class DynamicBean { 
    Map<String,String> properties; 

    // Contructor... 

    public String getProperty(String name) throws UnknownPropertyException { 
     // Get the property from the Map and returns it 
    } 

    public void setProperty(String name, String value) throws UnknownPropertyException { 
     // Updates the property into the Map 
    } 
} 

編輯

對於溶膠詠這個問題,我寫我自己MessageBodyWriter:

DynamicBeanProvider.java

@Provider 
@Produces({ MediaType.APPLICATION_XHTML_XML }) 
public class DynamicBeanProvider implements MessageBodyWriter<DynamicBean> { 

    @Override 
    public boolean isWriteable(Class<?> clazz, Type paramType, Annotation[] paramArrayOfAnnotation, MediaType paramMediaType) { 
     return DynamicBean.class.isAssignableFrom(clazz); 
    } 

    @Override 
    public long getSize(DynamicBean paramT, Class<?> paramClass, Type paramType, Annotation[] paramArrayOfAnnotation, 
      MediaType paramMediaType) { 
     return -1;//-1 indicates it's not possible to determine the size in advance 
    } 

    @Override 
    public void writeTo(DynamicBean bean, Class<?> paramClass, Type paramType, Annotation[] paramArrayOfAnnotation, 
      MediaType mt, MultivaluedMap<String, Object> paramMultivaluedMap, OutputStream out) throws IOException, 
      WebApplicationException { 
     if (bean == null) { 
      throw new WebApplicationException(Status.NOT_FOUND); 
     } 

     String ret = null; 

     if (mt.equals(MediaType.APPLICATION_XHTML_XML_TYPE)) { 
      ret = convertDynamicBeanToXHTML(bean); 
     } 

     if (ret != null) { 
      out.write(ret.getBytes(Charset.forName("UTF-8"))); 
     } else { 
      throw new WebApplicationException(Status.INTERNAL_SERVER_ERROR); 
     } 
    } 
} 
+0

任何人都可以在沒有猜測的情況下找到它們嗎? –

+0

@四十二我不知道如何給澤西某種「讀者」來處理動態豆。 – Stephan

回答

0

MessageBodyWriter會工作,或者你可以用JAXB註解註釋您DynamicBean實驗。但是你必須有一些機制來發現屬性。

UPDATE:

我收回我的建議,使用JAXB:這可能會是一個很大的不僅僅是使用MessageBodyWriter更多地參與。將地圖轉換爲JSON很漂亮easy

相關問題