Вы вызываете действие epgProgramDetail, отправляющее анонимный объект Json: {"programId": programId}, но в сигнатуре действия вы ожидаете однострочный programId.
Чтобы разобрать Json, передайте тело (нетронутое) как inputStream в Gson для анализа, обратите внимание, что вы передаете класс pojo, представляющий корень, в unmarshall. Пример:
Gson g = new Gson();
InputStreamReader isr = new InputStreamReader(request.body);
DestinatarioDTO dto = g.fromJson(isr, DestinatarioDTO.class);
Мы используем это для очень сложных случаев, но вы можете передать карту, например, если вы не хотите создавать класс.
Полагаю, в вашем случае передачи programId в строке запроса должно быть достаточно.
Пока, Ганс