我正在開發一個Symfony 2 WebApp,它提供了一個JSON webservice來與不同平臺(iOS,Android等)上的移動應用進行通信。Symfony2 + FOS RestBundle:在應用ParamConverter之前過濾/清除JSON請求
的Web應用程序使用FOS RestBundle處理和反序列化接收到的JSON數據:
# app/config/config.yml
sensio_framework_extra:
request: { converters: true }
fos_rest:
...
body_converter:
enabled: true
/**
* Sync Controller implementation
* @ParamConverter("post", converter="fos_rest.request_body")
*/
public function syncAction(SyncBag $syncBag) {
// ...
}
/**
* Sync Data Wrapper
*/
public class SyncBag {
...
/**
* @JMS\Type("DateTime<'Y-m-d'>")
*/
private $startDate;
}
這工作得很好。 問題:某些移動應用使用錯誤的日期格式發送一些數據:雖然WebApp預計「Y-m-d」移動應用發送「Y-m-d H:i:s」。這導致一個例外:
捕獲的PHP異常 的Symfony \分量\ HttpKernel \異常\ BadRequestHttpException: 「無效的日期時間 」2016年3月4日12:00:00「,預期的格式Y-M-d」。在 /.../vendor/friendsofsymfony/rest-bundle/FOS/RestBundle/Request/AbstractRequestBodyParamConverter.php 線113
當然更新所述移動應用使用/發送正確的日期格式爲正確的解決這個錯誤。但是實施和發佈這個bugfix需要很長時間。通過蘋果審查需要一些時間。等待用戶更新最新版本需要一些時間。等等。
另一方面,通過更新WebApp中的反序列化過程,可以很容易地解決問題。
問題: 是否有可能掛鉤到FOS RestBundle ParamConverter中的反序列化過程?如果我可以在轉換器處理數據之前過濾/清除請求(簡單的搜索/替換錯誤的日期格式),問題可以在幾分鐘內解決。
任何想法/建議如何做到這一點?
謝謝!