Newer Version Available

This content describes an older version of this product. View Latest

Returning Data from an Apex Server-Side Controller

Return results from a server-side controller to a client-side controller using the return statement. Results data must be serializable into JSON format.

Return data types can be any of the following.

  • Simple—String, Integer, and so on. See Basic Types for details.
  • sObject—standard and custom sObjects are both supported. See Standard and Custom Object Types.
  • Apex—an instance of an Apex class. (Most often a custom class.) See Custom Apex Class Types. You can’t use an Apex inner class as a return value for an Apex method that's called by an Aura component.
  • Collection—a collection of any of the other types. See Collection Types.

Returning Apex Objects

Here’s an example of a controller that returns a collection of custom Apex objects.
1public with sharing class SimpleAccountController {
2    
3    @AuraEnabled
4    public static List<SimpleAccount> getAccounts() {
5
6        // Perform isAccessible() check here
7		
8        // SimpleAccount is a simple "wrapper" Apex class for transport
9        List<SimpleAccount> simpleAccounts = new List<SimpleAccount>();
10
11        List<Account> accounts = [SELECT Id, Name, Phone FROM Account LIMIT 5];
12        for (Account acct : accounts) {
13            simpleAccounts.add(new SimpleAccount(acct.Id, acct.Name, acct.Phone));
14        }
15        
16        return simpleAccounts;
17    }
18}

When an instance of an Apex class is returned from a server-side action, the instance is serialized to JSON by the framework. Only the values of public instance properties and methods annotated with @AuraEnabled are serialized and returned.

For example, here’s a simple “wrapper” Apex class that contains a few details for an account record. This class is used to package a few details of an account record in a serializable format.
1public class SimpleAccount {
2    
3    @AuraEnabled public String Id { get; set; }
4    @AuraEnabled public String Name { get; set; }
5    public String Phone { get; set; }
6    
7    // Trivial constructor, for server-side Apex -> client-side JavaScript
8    public SimpleAccount(String id, String name, String phone) {
9        this.Id = id;
10        this.Name = name;
11        this.Phone = phone;
12    }
13    
14    // Default, no-arg constructor, for client-side -> server-side
15    public SimpleAccount() {}
16    
17}
When returned from a remote Apex controller action, the Id and Name properties are defined on the client-side. However, because it doesn’t have the @AuraEnabled annotation, the Phone property isn’t serialized on the server side, and isn’t returned as part of the result data.

Standard Apex limits, such as the maximum number of records retrieved by SOQL queries, apply when returning data from a server-side controller. See Execution Governors and Limits in the Apex Developer Guide.

Note