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.

Returning Apex Objects

Here’s an example of a controller that returns a collection of custom Apex objects.
public with sharing class SimpleAccountController {
    
    @AuraEnabled
    public static List<SimpleAccount> getAccounts() {

        // Perform isAccessible() check here
		
        // SimpleAccount is a simple "wrapper" Apex class for transport
        List<SimpleAccount> simpleAccounts = new List<SimpleAccount>();

        List<Account> accounts = [SELECT Id, Name, Phone FROM Account LIMIT 5];
        for (Account acct : accounts) {
            simpleAccounts.add(new SimpleAccount(acct.Id, acct.Name, acct.Phone));
        }
        
        return simpleAccounts;
    }
}

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.
public class SimpleAccount {
    
    @AuraEnabled public String Id { get; set; }
    @AuraEnabled public String Name { get; set; }
    public String Phone { get; set; }
    
    // Trivial constructor, for server-side Apex -> client-side JavaScript
    public SimpleAccount(String id, String name, String phone) {
        this.Id = id;
        this.Name = name;
        this.Phone = phone;
    }
    
    // Default, no-arg constructor, for client-side -> server-side
    public SimpleAccount() {}
    
}
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.