0

Spring

Java 8

Here my enum

public enum NEStatus {
    Online(0), 
    Offline(1),
    Unknown(2),
}

Here snippet:

@EventListener(condition = "#sdnStatusEvent.getNeStatus() != null && #sdnStatusEvent.getNeStatus() == T(com.mycompany.myproject.NEStatus).Offline")
public void handleSdnStatusEvent(SdnStatusEvent sdnStatusEvent) {
    LOGGER.info("handleSdnStatusEvent: sdnStatusEvent = {}", sdnStatusEvent);
}

And this work just fine.

But I want to skip full package name to my enum.

So I try this:

    @EventListener(condition = "#sdnStatusEvent.getNeStatus() != null && #sdnStatusEvent.getNeStatus() == #object.NEStatus.name() == 'Offline'")
    public void handleSdnStatusEvent(SdnStatusEvent sdnStatusEvent) {
        LOGGER.info("handleSdnStatusEvent: sdnStatusEvent = {}", sdnStatusEvent);
    }

But I get error:

2023-07-05 12:25:34.424 ERROR [ContextLoader:localhost-startStop-1] Context initialization failed
org.springframework.expression.spel.SpelParseException: EL1041E: After parsing a valid expression, there is still more data in the expression: 'eq(==)'
        at org.springframework.expression.spel.standard.InternalSpelExpressionParser.doParseExpression(InternalSpelExpressionParser.java:129) ~[spring-expression-4.3.22.RELEASE.jar:4.3.22.RELEASE]
Alexei
  • 14,350
  • 37
  • 121
  • 240

1 Answers1

0

Here my solution

public class SdnStatusEvent extends ApplicationEvent {
    private NEStatus neStatus;

    public SdnStatusEvent(Object source, NEStatus neStatus) {
        super(source);
        this.neStatus = neStatus;
    }

    public boolean isOnline() {
        return neStatus == NEStatus.Online;
    }
}

And usage:

@EventListener(condition = "#sdnStatusEvent.getNeStatus() != null && #sdnStatusEvent.isOnline()")
    public void handleSdnStatusEvent(SdnStatusEvent sdnStatusEvent) {
}

And now it's work just fine :-)

Alexei
  • 14,350
  • 37
  • 121
  • 240