Confirmation that (inner) classes are still not fully supported in @AuraEnabled methods?
Unfortunately I wasn't able to make it work using the class directly, either with an inner class or even a top level class. Using the second solution with a String attribute in your AuraEnabled method and then deserialize it is the best solution I've found. It works for both inner class and top level class.
I've just published a blog post to list all the issues I've found with AuraEnabled types (unfortunately this one isn't the only one) and the workaround I used. You can find it here: https://blog.texei.com/lightning-components-auraenabled-method-parameters-whats-working-and-what-s-not-83c351356104
Spring 19 Update :
I just stumbled upon this question and I recently used something similar in Spring 19 so thought might answer this.
Inner classes are supported now, you have to use setter and getter in your AuraEnabled inner class variables.
So your code will be:
public class MyApexClassController {
@AuraEnabled
public static ApexWrapper goGetMyData(ApexWrapper data) {
System.debug('Inner class data: ' + JSON.serialize(data)); // This will print without giving GACK
ApexWrapper aw= new ApexWrapper();
ad.Name = '222';
return ad;
}
//Inner Apex Class
public class ApexWrapper{
@AuraEnabled
public String Name {get;set;} //123abc
}
}