Three approaches to handling missing JSON properties when unmarshalling into Scala case classes with the Play Framework. Covers Play 2.6’s built-in WithDefaultValues, the Reads.pure() fallback pattern, and a reusable JsonDefaultValueFormatter trait that deep-merges incoming JSON with a default object — useful for large, deeply nested case classes where backward compatibility matters.