Minecraft wiki entry for Spawn, associated text: The mob's collision box must not collide with any liquid.
if it is not a strider, the light level of the spawning block must be 9 or brighter.
If it is a mooshroom, then.....
the block directly below the spawning block must be mycelium.
If it is a turtle, then.....
the block directly below the spawning block must be sand.
the spawning block must be level 67 or lower.
If it is a ocelot, then....
Spawn has a 33% chance of failure.
the block directly below the spawning block can either be grass block or leaves.
If it is a parrot, then....
the block directly below the spawning block can either be grass block, leaves, or log.
If it is a rabbit, then....
the block directly below the spawning block must either be grass block, snow[4], or sand.
For all others then.....
the block directly below the spawning block must be a grass block.
If it is a strider, then.....
Spawn attempts with lava above check upward as long as there is still lava for if they can successfully spawn in a lava block with air on top.
The spawning block must be at y level 31 or lower.