Lars Rosenqvist
Lars Rosenqvist

Reputation: 431

Spring Boot (Jackson): How to avoid class name being serialized to JSON

I am consuming some XML exposed from a REST application and want to expose this as JSON in my own REST service.

Right now I have the following POJO:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "salesMarket"
})
@XmlRootElement(name = "salesMarkets")
public class SalesMarkets {

protected List<SalesMarket> salesMarket;

public List<SalesMarket> getSalesMarket() {
    if (salesMarket == null) {
        salesMarket = new ArrayList<SalesMarket>();
    }
    return this.salesMarket;
   }

}

Which produces the following JSON:

  "salesMarkets": {
"salesMarket": [
  {
    "brands": {
      "brand": [
        "DAN"
      ]
    },
    "code": "999"
  },
  {
    "brands": {
      "brand": [
        "DAN"
      ]
    },
    "code": "208"
  }
]
}

My question is (using Jackson annnotations), is there a way to avoid the class name being serialized as JSON??, so I instead would have:

    "salesMarket": [{
    "brands": {
        "brand": [
            "DAN"
        ]
    },
    "code": "999"
}, {
    "brands": {
        "brand": [
            "DAN"
        ]
    },
    "code": "208"
}]

I'm thinking some Jackson annotaion on the class SalesMarkets... But havn't been succesfull yet :-(

UPDATE:

Just realised that the SalesMarket class was referenced from another class - which is why the "salesMarkets" appears in the JSON. Is there a way to annotate the SalesMarkets field, so that it is ignored but not the fields contained there in?:

@XmlRootElement(name = "product")
public class Product {

@XmlElement(required = true)
protected String propertyID;
@XmlElement(required = true)
protected String season;
**protected SalesMarkets salesMarkets;**
protected Information information;
protected Features features;
protected Location location;
protected Address address;
protected Buildings buildings;
protected Pictures pictures;
protected Media media;
protected Prices prices;
protected Offers offers;
protected Availabilities availabilities;
protected Services services;
protected Concepts concepts;
...

Upvotes: 4

Views: 2459

Answers (1)

miensol
miensol

Reputation: 41608

You need to either remove

@XmlRootElement(name = "salesMarkets")

Or disable the feature on ObjectMapper:

objectMapper.configure(SerializationConfig.Feature.WRAP_ROOT_VALUE, true)

To further unwrap salesMarkets field in Product instances you can do the following:

public class Product {
  protected SalesMarkets salesMarkets;

  public List<SalesMarket> getSalesMarkets(){
     if(salesMarkets != null){
       return salesMarkets.getSalesMarket();
     } else {
       return null;
     }
  }
}

Upvotes: 6

Related Questions