嘗試使用Spring MVC構建RESTful Web服務。如何使用Spring MVC設計通用響應構建器/ RESTful Web服務?
控制器應返回特定的Java類型,但響應正文必須是通用信封。如何才能做到這一點?
下面的代碼段是我到目前爲止有:
控制器的方法:
@Controller
@RequestMapping(value = "/mycontroller")
public class MyController {
public ServiceDetails getServiceDetails() {
return new ServiceDetails("MyService");
}
}
響應信封:
public class Response<T> {
private String message;
private T responseBody;
}
ServiceDetails
代碼:
public class ServiceDetails {
private String serviceName;
public ServiceDetails(String serviceName) {
this.serviceName = serviceName;
}
}
給客戶的預期最終響應應顯示爲:
@Controller
@RequestMapping(value = "/mycontroller")
public class MyRestController {
@Autowired
private MyController myController;
@RequestMapping(value = "/details")
public @ResponseBody Response<ServiceDetails> getServiceDetails() {
return new Response(myController.getServiceDetails(),"Operation OK");
}
}
該解決方案保留原始MyController
獨立的來源:
{
"message" : "Operation OK"
"responseBody" : {
"serviceName" : "MyService"
}
}
如果您使用的是Jackson或FlexJson,那麼爲什麼不能直接在您的方法中返回Response對象呢? JSON序列化程序應該能夠序列化任何複雜的對象。 – CodeChimp
我正在使用傑克遜。但我仍然希望控制器返回請求特定的java類型。我認爲它更清潔,更直觀。 –
加上有一些鍋爐板代碼來構建響應對象,所以我想只是從一個地方做到這一點 –