我正在处理一个Symfony应用程序,我有一个用户实体:
/** * @ORM\Entity * @ORM\Table(name="user") * @Serializer\ExclusionPolicy("all") */ class User { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") * * @Serializer\Expose() */ private $id; /** * @var string $email * * @ORM\Column(name="email", type="string", length=255, unique=true) * @Assert\NotBlank() * @Assert\Email() * @Serializer\Expose() */ private $email; /** * @ORM\Column(type="string", length=64) * @Assert\NotBlank() */ private $password; }
我正在尝试将请求负载反序列化到我的实体,如下所示:
$data = $this->request->request->all();
$jsonContent = $this->serializer->serialize($data, 'json'); // serializing goes fine
dump($jsonContent);
{
"email":"John.Doe@domain.com",
"password":"123"
}
$object = $this->serializer->deserialize($jsonContent, User::class, 'json');
dump($object); // I'm getting null values
AppBundle\Entity\User {
-id: null
-email: null
-password: null
}
因此,当我尝试使用验证器验证对象时:
$errors=$this->validator->validate($object);
验证失败,响应为:
{
"errors" :
{
"email": "This value should not be blank.",
"password": "This value should not be blank."
}
}
但是,当我移除这行@serializer\exclusionpolicy(“all”)
时,一切正常。
我正在使用:
我该如何解决这个问题?
另一种方法是使用表单,如下所示:
用户类型
<?php
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('email')
->add('password')
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\User'
));
}
}
?>
在您的控制器中,您可以拥有:
class UserController extends Controller
{
/**
* @Route("/api/users", name="api_users_post_something")
* @Method("POST")
*/
public function postSomethingAction(Request $request)
{
$data = $this->serializer->deserialize($request->getContent(), 'array', 'json');
$user = new User();
$form = $this->createForm(UserType::class, $user, ['csrf_protection' => false]); // disable csrf_protection if you are making api
$form->submit($data);
if(!($form->isSubmitted() && $form->isValid())) {
// Send form errors
}
// Persist and flush or do what you want to do
}
}
?>
这只是通过使用表单处理和使用表单验证来尝试示例。我希望这能对你有所帮助。
代码试图采用java.awt.color类使用jackson对象映射器对其进行序列化。获取生成的json字符串并将其反序列化回java.awt.color类。但是在进行反序列化时会出现以下错误。 线程"main"com.fasterxml.jackson.databind.JsonMappingException中的异常:找不到适合类型[简单类型,类java.awt.颜色]的构造函数:无法从JSO
问题内容: 我试图序列化和反序列化内部对象的数组列表: HairList对象也是一个可序列化的对象。 此代码执行返回以下错误: 排队 我不知道我在做什么错。你能给个小费吗? 更新: 解决: 仅使用HairBirt的本机数组而不是ArrayList即可工作: 代替 感谢大家的帮助。 问题答案: 不要使用-而是使用二进制数据并对它进行base64编码,以将其转换为字符串而不会丢失信息。 我强烈怀疑这是
我试图调用一个Spring Cloud Data Flow REST Endpoint,它应该返回一个任务的所有执行列表,该任务的名称在输入中传递。 首先,我在浏览器中运行了以下网址: 浏览器上显示了以下JSON: 接下来,我尝试通过Java调用同一个RESTendpoint;然而,无论我尝试什么,响应对象似乎都是空的,没有填充任何属性: 方法1:创建自定义域类来反序列化响应。(不工作。响应中收到
问题内容: 作为一个小项目,我一直在尝试做一个小事,它可以读取序列化的lambda(从本地或从FTP)并调用它们的运行函数作为测试的一部分,以测试Windows中的文件关联(即打开某些文件类型)使用特定程序打开它们),但不管如何,无论如何,它似乎从未正确地反序列化。 lambda被这样声明 并使用由ObjectOutputStream包装的[n可选] BufferedOutputStream包装的
问题内容: 在hibernate状态下执行条件查询时,出现以下异常: 可能是什么问题呢? PS:虽然可能不相关,但我的hibernate版本是hibernate-4.0.1 final。 问题答案: 问题在于被引用的实体对实体有另一个引用,并且该关系未由任何-like注释进行注释。