I set the encoding to UTF-8 for firstname field from my java code and send that string to the insert query.
This sounds fishy. You don't set the encoding for individual fields - you set it once when you create the database. Then it's used for all character data in the whole database.
Now when I retrieve it do I have to decode that again using UTF-8? Is that the right way to go?
No. If what is stored in the database is in UTF-8, then it will be read correctly into Java strings; the application doesn't have to do anything.