I get back JSON like the following:
{ Id = a0Ef0000002TPKVEA4; Name = a0Ef0000002TPKV; attributes = { type = "Market__c"; url = "/services/data/v29.0/sobjects/Market__c/a0Ef0000002TPKVEA4"; };
The attributes portion doubles the data size. I’ve searched the docs but can’t find a way to remove it. Here is the code I am using
@HttpGet global static Aggregate doGet() { RestRequest req = RestContext.request; string userid = req.params.get('UserId'); try { User user = [SELECT FirstName, LastName, Title, Email, Phone, MobilePhone, Street, City, State, PostalCode, Country, LevelOfCare__c, Username, PERNER__c FROM User WHERE Id = :userid]; List<Market__c> markets = [SELECT Id, Name FROM Market__c]; return new Aggregate(user, markets); } catch (exception e) { return null; } } global class Aggregate { public User user {get; set;} public List<Market__c> markets {get; set;} public Aggregate(User u, List<Market__c> m) { user = u; markets = m; } } }
Answer
As it is custom Apex code, instead of directly returning the SObject, return a simple “bean” class that just has an Id and Name property with the values copied from the SObject:
public class Bean {
public Id Id;
public String Name;
Bean(SObject sob) {
this.Id = sob.Id;
this.Name = (String) sob.get('Name');
}
}
PS
Based on the posted code, it is the nested SObjects that you need to eliminate:
global class Aggregate {
public Bean user {get; set;}
public List<Bean> markets {get; set;}
public Aggregate(User u, List<Market__c> ms) {
user = new Bean(u);
markets = new List<Bean>();
for (Market__c m : ms) {
markets.add(new Bean(m));
}
}
}
Attribution
Source : Link , Question Author : Bradley Thomas , Answer Author : Keith C