当前位置: 首页 > 知识库问答 >
问题:

JMS序列化程序注释组在使用Symfony 4的实体上不工作

饶德元
2023-03-14

多年来,我一直在SF2和SF3上使用组注释。我在试SF4.1。当我向endpoint发送GET时,得到的是一个空JSON。

my composer.json中有趣的部分:

 "friendsofsymfony/rest-bundle": "^2.3",
 "jms/serializer-bundle": "^2.3",
 "sensio/framework-extra-bundle": "^5.1",
 "symfony/serializer-pack": "^1.0"

配置:

framework:
    serializer:
       enabled: true
       enable_annotations: true

sensio_framework_extra:
    view: { annotations: true }

fos_rest:
   routing_loader:
        default_format: json

   view:
        view_response_listener: 'force'

   format_listener:
        rules:
               - { path: ^/, prefer_extension: true, fallback_format: json, priorities: [ json,xml, html  ] }

实体

use JMS\Serializer\Annotation\Groups;

class User implements UserInterface, \Serializable
{

private $id;

/**
 * @Groups({"api"})
 */
private $username;

和endpointAPI控制器:

use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Context\Context;
use FOS\RestBundle\View\View;

class UserController extends FOSRestController {

public function getUserAction(Request $request, EntityManagerInterface $em)
{
    $user = $em->getReference('App:User', 1);
    $view = View::create();
    $context = new Context();
    $context->setGroups(['api']);
    $view->setContext($context);
    $view->setData($user);
    return $this->handleView($view);
 }
}

如果我删除“$context”-

任何想法?谢谢!

调试信息:

bin/console debug:container jms

选择以下服务之一以显示其信息[fos_rest.serializer.jms]:[0]fos_rest.serializer.jms

0

服务信息”fos_rest.serializer.jms " =================================================

期权价值

服务IDfos_rest.serializer.jms
类FOS\RestBundle\Serializer\JMSSeriazerAdapter
标签-
公共否
合成否
懒惰是
共享是
抽象否
自动拥有否
自动配置否

共有1个答案

端木承业
2023-03-14

默认情况下,如果安装了JMSSerializer,FOSRest更喜欢它。因此,首先检查JMSSerializerBundle定义的服务是否已定义

./bin/console debug:container jms_serializer.serializer

如果此命令显示错误消息(ServiceNotFound),则说明捆绑包未正确安装。检查config/bundles.php,如果缺少,则添加以下行:

JMS\SerializerBundle\JMSSerializerBundle::class => ['all' => true],

如果它确实安装了,您可以检查fos\u rest配置,如果它可能会更改序列化程序服务。您可以这样配置它:

fos_rest:   
    service:
        serializer: "fos_rest.serializer.jms"
 类似资料:
  • 我已经在google上搜索了将近一天这个问题,并尝试了几个修复(包括StackOverflow的4或5个),但都没有成功。我有一个带注释的POJO,用于Jackson 2.10.2 我使用这个POJO为一些外部请求创建XML。一切都很好,但现在我需要重新排序生成的XML中的字段,似乎什么都不起作用。 我首先尝试在班级层面进行设置: 然后,我尝试使用以下命令设置每个字段的顺序: 我还尝试在所有字段上

  • 问题内容: 我正在尝试使用symfony序列化程序组件反序列化具有关系的实体。这是我的实体: 和 流派实体 : 现在在我的 控制器操作中, 我正在尝试以下操作: 还有我的 json数据 : 但是我得到了下一个 错误 : 给定类型为“ AppBundle \ Entity \ Genre”,“ array”的预期参数(500内部服务器错误) 是否可以使用内部具有关系的实体反序列化json请求? 感谢

  • 我阅读了Jackson的annotations文档,但是我仍然找不到如何从annotations调用自定义序列化程序来序列化< code>java.sql.Date对象。 但是注释似乎只接受布尔值作为参数,而注释doc则表示: @JsonValue(method):用于标记返回值用作对象序列化的方法;通常用于标记生成字符串的方法(如toString())以生成JSON原语值序列化块引号 我是否使用

  • 我们希望序列化Java类的模式,以便任何字段或类上存在的所有注释也序列化到模式中。 我没有找到这样做的工具。 Avro不处理非字符串映射键,FasterXML不处理循环引用。它们都不会将注释序列化到模式中。 是否有任何Java JSON(反)序列化程序可以做到这一点?

  • 我有一个用户对象,它被发送到服务器和从服务器发送。当我发出user对象时,我不想将散列密码发送给客户端。因此,我在password属性中添加了,但这也阻止了它反序列化为密码,这使得用户在没有密码时很难注册。 如何才能只让应用于序列化而不应用于反序列化?我使用的是Spring JSONView,所以我对没有太多的控制权。 将添加到属性 仅在getter方法上添加

  • 问题内容: 我有一个发送到服务器或从服务器发送的用户对象。发送用户对象时,我不想将哈希密码发送给客户端。因此,我添加了password属性,但这也阻止了将其反序列化为密码,这使得在没有密码的情况下很难注册用户。 我怎样才能只应用序列化而不是反序列化?我使用的是Spring JSONView,因此对的控制不多。 我尝试过的事情: 添加到属性 仅添加getter方法 问题答案: 确切的操作方法取决于你