From addon-studio
Cria, revisa e padroniza handlers globais de exceção Sankhya com `@ControllerAdvice` + `@ExceptionHandler` — rollback automático, DTO de erro, mapeamento de status HTTP. Use ao criar, alterar, revisar, auditar ou consolidar tratamento de exceções globais em projetos Sankhya Addon Studio, ou ao tocar em código com `@ControllerAdvice`/`@ExceptionHandler`.
How this skill is triggered — by the user, by Claude, or both
Slash command
/addon-studio:controller-adviceThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
`@ControllerAdvice` centraliza tratamento de excecoes de todos `@Controller` e `@Service`. Excecao capturada = **rollback automatico** da transacao ativa.
@ControllerAdvice) — Addon Studio 2.0@ControllerAdvice centraliza tratamento de excecoes de todos @Controller e @Service. Excecao capturada = rollback automatico da transacao ativa.
Beta / Acesso Antecipado: funcionalidade sujeita a mudancas.
Referencia complementar:
controller— controllers devem deixar excecao propagar.
import br.com.sankhya.studio.web.ControllerAdvice;
import br.com.sankhya.studio.web.ExceptionHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
@ControllerAdvice
public class GlobalExceptionHandler {
private static final Logger log = Logger.getLogger(GlobalExceptionHandler.class.getName());
@ExceptionHandler({ObjectNotFoundException.class})
public ErrorResponse handleNotFound(ObjectNotFoundException e) {
log.log(Level.INFO, "Recurso nao encontrado: {0}", e.getMessage());
return new ErrorResponse("NOT_FOUND", e.getMessage(), 404);
}
@ExceptionHandler({IllegalArgumentException.class, ValidationException.class})
public ErrorResponse handleValidation(Exception e) { // parametro mais generico — OK
log.log(Level.WARNING, "Validacao falhou", e);
return new ErrorResponse("BAD_REQUEST", e.getMessage(), 400);
}
}
void@ExceptionHandler deve retornar objeto ou primitivo — sera serializado para JSON via Gson. void causa erro de compilacao.
// PROIBIDO
@ExceptionHandler({MinhaException.class})
public void handle(MinhaException e) { ... }
// CORRETO
@ExceptionHandler({MinhaException.class})
public ErrorResponse handle(MinhaException e) {
return new ErrorResponse(...);
}
@ExceptionHandler aceita array de classes:
@ExceptionHandler({IOException.class, SQLException.class, TimeoutException.class})
public ErrorResponse handleInfra(Exception e) {
return new ErrorResponse("INFRA_ERROR", "Falha temporaria.", 503);
}
Util quando varias excecoes compartilham tratamento:
@ExceptionHandler({IOException.class, SQLException.class})
public ErrorResponse handle(Exception e) { // Exception = superclasse comum
...
}
Excecao capturada = transacao ativa revertida via setRollbackOnly(). Sem acao manual necessaria.
@ExceptionHandler({Exception.class})Captura tudo (inclusive filhas), bloqueando handlers especificos. Sem ordem garantida entre @ControllerAdvice diferentes — handler generico de outra classe pode "roubar" excecao de handler especifico.
// PROIBIDO
@ExceptionHandler({Exception.class})
public ErrorResponse handleAll(Exception e) { ... }
// CORRETO — declarar excecoes especificas
@ExceptionHandler({MinhaException.class, OutraException.class})
public ErrorResponse handle(Exception e) { ... }
@ControllerAdvice distintosSe duas classes @ControllerAdvice tratam a mesma excecao, framework escolhe qualquer uma sem ordem definida.
Regra: uma excecao = exatamente um handler em todo o projeto.
@ExceptionHandler sao silenciosamente ignorados@ControllerAdvice
public class GlobalExceptionHandler {
// IGNORADO — nao tem @ExceptionHandler
public ErrorResponse handle(MinhaException e) { ... }
}
Estrutura fica a criterio do projeto. Tipos diferentes de excecao podem retornar DTOs diferentes (NotFoundResponse, ValidationErrorResponse, etc.). Padrao comum:
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class ErrorResponse {
private String code;
private String message;
private int status;
private long timestamp;
public ErrorResponse(String code, String message, int status) {
this(code, message, status, System.currentTimeMillis());
}
}
Nunca incluir
e.getStackTrace()oue.toString()no DTO. Stack trace fica no log; mensagem ao cliente e amigavel.
| Excecao | Level |
|---|---|
EntityNotFoundException | INFO |
ObjectNotFoundException | INFO |
IllegalArgumentException | WARNING |
DomainValidationException | WARNING |
ValidationException | WARNING |
IntegrationImportException | WARNING |
IntegrationExportException | WARNING |
IntegrationApiException | WARNING |
IntegrationNetworkException | WARNING |
JapeSessionInterruptedError | SEVERE |
IOException / SQLException | SEVERE |
RuntimeException | SEVERE |
| Anti-Pattern | Correcao |
|---|---|
Handler retornando void | Retornar objeto/primitivo |
@ExceptionHandler({Exception.class}) como pega-tudo | Declarar excecoes especificas |
| Duplicar handler da mesma excecao em classes diferentes | Uma excecao = um handler |
Metodo em @ControllerAdvice sem @ExceptionHandler | Adicionar a anotacao ou remover o metodo |
@ExceptionHandler({}) (array vazio) | Declarar ao menos uma classe |
| Expor stack trace no DTO de resposta | Log no servidor; mensagem amigavel ao cliente |
| Esquecer de logar a excecao | Sempre logar com Level adequado |
try/catch em controller para excecao de negocio | Deixar propagar — @ControllerAdvice trata |
@ControllerAdvice@ControllerAdvice.@ExceptionHandler({Excecao.class}) — array explicito.void.java.util.logging) com Level adequado em todos os handlers.@ExceptionHandler({Exception.class}).controller — controllers devem deixar exceção propagar até o advicecontroller — endpoint REST que dispara as exceções tratadastest — cobertura de cenários de erroProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub snk-devcenter/addon-studio --plugin addon-studio