我不明白为什么注释在我的 GET REST API上什么都不做。 我在所有类的供应商中都有JMS Serializer ..但是当我打电话给我的webservice时,我的所有属性都出现了..然而我做了一个 @ExlusionPolicy(" all")在 ID属性上强>> @Expose ..
这是我的实体产品:
<?php
namespace GroupeGC\Bundle\ProductBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Jms\Serializer\Annotation as JMS;
/**
* Product
*
* @ORM\Table(name="gc_product")
* @ORM\Entity
* @JMS\ExclusionPolicy("all")
*
*/
class Product
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
* @JMS\Type("integer")
* @JMS\Expose
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="code", type="string", length=255, nullable=false)
*/
private $code;
/**
* @var string
*
* @ORM\Column(name="label", type="string", length=255, nullable=true)
*
*/
private $label;
/**
* @var float
* @ORM\Column(name="volume", type="float")
*
*/
private $volume;
/**
* @var float
* @ORM\Column(name="weight", type="float")
*/
private $weight;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set code
*
* @param string $code
* @return Product
*/
public function setCode($code)
{
$this->code = $code;
return $this;
}
/**
* Get code
*
* @return string
*/
public function getCode()
{
return $this->code;
}
/**
* Set label
*
* @param string $label
* @return Product
*/
public function setLabel($label)
{
$this->label = $label;
return $this;
}
/**
* Get label
*
* @return string
*/
public function getLabel()
{
return $this->label;
}
public function getVolume() {
return $this->volume;
}
public function setVolume($volume) {
$this->volume = $volume;
return $this;
}
public function getWeight() {
return $this->weight;
}
public function setWeight($weight) {
$this->weight = $weight;
return $this;
}
但是我们可以看到,正常情况下,我应该拥有应该出现在我的JSON中的id属性,而我拥有所有属性......而且我不明白。
编辑1:这是app / config中的fos_rest配置:
fos_rest:
view:
failed_validation: HTTP_BAD_REQUEST
default_engine: php
formats:
json: true
xml: true
format_listener:
prefer_extension: true
body_listener:
decoders:
json: fos_rest.decoder.json
xml: fos_rest.decoder.xml
routing_loader:
default_format: json
fos_js_routing:
routes_to_expose: [oro_*]
我认为这里没有问题。
答案 0 :(得分:1)
By default, the serializer will retrieve, or set the value via reflection.
here。因此,您实体中的每个属性都将被检索/设置。
/**
* @JMS\ExclusionPolicy("all")
* @JMS\AccessType("public_method")
*/
使用AccessType注释时,您告诉序列化程序使用公共方法(例如getX,setX,hasX)来检索/设置值。