我使用Symfony 4.2和这些捆绑包(FosrestBundle,JMS Serialializer Bundle(开始了API休息。我有一个Angular应用程序,该应用程序发送了许多具有像FirstName这样属性的身体的请求,但是它与我的用户属性不匹配,而其属性也是firstName。
此外,JSON响应已将所有骆驼属性更改为下划线案例。
我尝试了很多事情。没有什么可用。对不起,我的英语,希望您能理解我。
实体:
class User
{
...
/**
* @ORMColumn(type="string", length=255)
*/
private $firstName;
...
}
控制器:
/**
* @Post(
* path = "/users",
* name = "app_user_create"
* )
* @View()
* @ParamConverter("user", converter="fos_rest.request_body")
*/
public function createUser(Request $request, User $user, ObjectManager $em, UserRepository $userRepo, DealRepository $dealRepo)
{
$deal = $dealRepo->find(1);
$user->setRegisteredAt(new DateTime())
->setDeal($deal);
$em->persist($user);
$em->flush();
$view = $this->view($user, 200)
->setHeader('Access-Control-Allow-Origin', '*');
return $view;
}
jms_serializer.yaml:
jms_serializer:
visitors:
xml_serialization:
format_output: '%kernel.debug%'
fos_rest.yaml:
fos_rest:
view:
formats: { json: true, xml: false, rss: false }
view_response_listener: true
serializer:
serialize_null: true
body_converter:
enabled: true
format_listener:
rules:
- { path: ^/, prefer_extension: true, fallback_format: json, priorities: [json] }
这是我的JSON请求的身体:
{
"username": "toto",
"firstName": "tutu", // CamelCase
"name": "toti",
"password": "blabla",
"email": "toto@gmail.com"
}
这是响应:
{
"id": 3,
"username": "toto",
"first_name": null, // UnderscoreCase and no matching
"name": "toti",
"password": "blabla",
"email": "toto@gmail.com"
}
您应该更改jmsSerializer的默认属性命名策略。
在您的config.yml
中。
jms_serializer:
property_naming:
id: 'jms_serializer.identical_property_naming_strategy'