Apache CXF 是一個非常流行的 web 服務框架,它可以輕松的創(chuàng)建 RESTful 服務。CXF 提供了眾多的特性,可以讓用戶快速構建高性能的 web 服務。
CXF 也支持將 Java 對象轉換成 JSON 格式的數(shù)據(jù)。下面是一個簡單的例子:
@Path("/example") @Produces(MediaType.APPLICATION_JSON) public class ExampleService { @GET @Path("/{id}") public ExampleObject getObject(@PathParam("id") int id) { ExampleObject obj = new ExampleObject(); obj.setId(id); obj.setName("example"); return obj; } public static void main(String[] args) { ExampleService service = new ExampleService(); JAXRSServerFactoryBean factory = new JAXRSServerFactoryBean(); factory.setAddress("http://localhost:8080/"); factory.setServiceBeans(Arrays.asList(service)); factory.create(); } }
上述的代碼創(chuàng)建了一個名為 ExampleService 的 RESTful 服務。在函數(shù) getObject 中,我們返回了一個名為 ExampleObject 的 Java 對象。這個 Java 對象將被 CXF 轉換成 JSON 格式數(shù)據(jù),然后發(fā)送給客戶端。
為了讓 CXF 輸出 JSON 格式數(shù)據(jù),我們在 @Produces 注解中設置了 MediaType.APPLICATION_JSON。這告訴 CXF 將對象序列化成 JSON 格式數(shù)據(jù)。
此外,我們還可以使用 JAXRSJsonProvider 類來進一步控制 JSON 序列化。例如:
ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true); JAXRSJsonProvider jsonProvider = new JAXRSJsonProvider(); jsonProvider.setMapper(mapper); factory.setProviders(Arrays.asList(jsonProvider));
上述代碼創(chuàng)建了一個 ObjectMapper 對象,并將 WRAP_ROOT_VALUE 設置為 true。然后將 ObjectMapper 對象設置給 JAXRSJsonProvider。最后將 JAXRSJsonProvider 對象添加到 CXF 工廠中。
我們可以看到,CXF 提供了很多功能來幫助我們創(chuàng)建 RESTful 服務并輸出 JSON 數(shù)據(jù)。使用 CXF,我們可以輕松地創(chuàng)建高性能、易于維護的 web 服務應用程序。