304.5. Operator 지원
파서는 단일 연산자만 지원하도록 제한됩니다.
왼쪽 값을 사용하려면 $\{ }로 묶어야 합니다. 구문은 다음과 같습니다.
${leftValue} OP rightValue
rightValue
를 '
, null
, 상수 값 또는 $\{ }로 묶은 다른 표현식으로 묶은 String 리터럴일 수 있습니다.
Operator 주변에는 공백이 있어야 합니다.
Camel은 rightValue 유형을 자동으로 입력하므로 숫자 값에 대해 > 비교를 사용할 수 있도록 문자열을 숫자로 변환할 수 있습니다.
지원되는 Operator는 다음과 같습니다.
Operator | 설명 |
---|---|
== | equals |
=~ | Camel 2.16: equals ignore case(문자열 값을 비교할 때 대소문자 무시) |
> | 보다 큼 |
>= | 크거나 같음 |
< | 보다 작음 |
⇐ | 작거나 같음 |
!= | 같지 않음 |
contains | 문자열 기반 값에 포함된 경우 테스트의 경우 |
포함되어 있지 않음 | 문자열 기반 값에 포함되지 않은 경우 테스트의 경우 |
~~ | 문자열 기반 값의 대/소문자 민감도를 무시하여 포함된 테스트의 경우 |
regex | 문자열 값으로 정의된 지정된 정규식 패턴에 대한 일치의 경우 |
정규 표현식이 아님 | 문자열 값으로 정의된 지정된 정규식 패턴과 일치하지 않는 경우For not matching against a given regular expression pattern defined as a String value |
in | 값 집합에서 일치하는 경우 각 요소는 쉼표로 구분해야 합니다.For matching if in a set of values, each element must be separated by comma. 빈 값을 포함하려는 경우 빈 값이 있는 4개의 값 세트이고 세 개의 값 집합인 ',bronze,silver,gold'를 사용하여 정의해야 합니다. |
제공되지 않음 | 값 집합에 없는 경우 일치하는 요소는 쉼표로 구분해야 합니다.For matching if not in a set of values, each element must be separated by comma. 빈 값을 포함하려는 경우 빈 값이 있는 4개의 값 세트이고 세 개의 값 집합인 ',bronze,silver,gold'를 사용하여 정의해야 합니다. |
is | 왼쪽 쪽 유형이 value인 경우 일치할 수 있습니다.For matching if the left hand side type is an instance of the value. |
없습니다. | 왼쪽 쪽 유형이 값의 인스턴스가 아닌 경우 일치할 수 있습니다.For matching if the left hand side type is not an instance of the value. |
범위 |
왼쪽이 숫자로 정의된 값 범위 내에 있는 경우 일치하는 경우: |
범위가 아님 |
왼쪽이 숫자로 정의된 값 범위 내에 있지 않은 경우 일치하는 경우 |
시작 날짜 | Camel 2.17.1, 2.18: 왼쪽 측면 문자열이 올바른 핸드 문자열로 시작되는 경우 테스트의 경우. |
종료일: | Camel 2.17.1, 2.18: 왼쪽 측면 문자열이 올바른 핸드 문자열로 끝나는 경우 테스트의 경우. |
다음과 같은 단항 연산자를 사용할 수 있습니다.
Operator | 설명 |
---|---|
++ | Camel 2.9: 숫자를 하나씩 늘리려면 다음을 수행하십시오. 왼쪽은 함수여야 하며 그렇지 않으면 리터럴로 구문 분석해야 합니다. |
— | Camel 2.9: 숫자를 하나씩 줄입니다. 왼쪽은 함수여야 하며 그렇지 않으면 리터럴로 구문 분석해야 합니다. |
\ | Camel 2.9.3 ~ 2.10.x - 값을 이스케이프하려면 (예: \$) $ 기호를 나타냅니다. special: \n을 새 줄에 사용하고, 탭(탭)에 \r을 사용하고, 캐리지 리턴에는 \r를 사용합니다. 참고 : 파일 언어 를 사용하여 에스컬레이션은 지원되지 않습니다. 참고 : Camel 2.11부터 이스케이프 문자는 더 이상 지원되지 않지만 다음 세 가지 특수 이스케이프로 대체됩니다. |
\n | Camel 2.11: 줄 바꿈 문자를 사용합니다. |
\t | Camel 2.11: 탭 문자를 사용합니다. |
\r | Camel 2.11: 캐리지 리턴 문자를 사용합니다. |
\} | Camel 2.18: } 문자를 텍스트로 사용하려면 |
다음과 같은 논리 연산자를 사용하여 식을 그룹화할 수 있습니다.And the following logical operators can be used to group expressions:
Operator | 설명 |
---|---|
및 | 대신 사용되지 않는 사용 && 논리 및 연산자는 두 식을 그룹화하는 데 사용됩니다. |
또는 | 더 이상 사용되지 않는 사용 || 논리 또는 연산자는 두 식을 그룹화하는 데 사용됩니다. |
&& | Camel 2.9: 논리 및 연산자는 두 식을 그룹화하는 데 사용됩니다. |
|| | Camel 2.9: 논리 또는 연산자는 두 식을 그룹화하는 데 사용됩니다. |
또는 Operator In Camel 2.4 사용 또는 이전 버전 은 간단한 언어 표현식에서 한 번 만 사용할 수 있습니다.
Camel 2.5 이상에서는 이러한 연산자를 여러 번 사용할 수 있습니다.
및 의 구문은 다음과 같습니다.
${leftValue} OP rightValue and ${leftValue} OP rightValue
OR의 구문은 다음과 같습니다.
${leftValue} OP rightValue or ${leftValue} OP rightValue
일부 예:
// exact equals match simple("${in.header.foo} == 'foo'") // ignore case when comparing, so if the header has value FOO this will match simple("${in.header.foo} =~ 'foo'") // here Camel will type convert '100' into the type of in.header.bar and if it is an Integer '100' will also be converter to an Integer simple("${in.header.bar} == '100'") simple("${in.header.bar} == 100") // 100 will be converter to the type of in.header.bar so we can do > comparison simple("${in.header.bar} > 100")
304.5.1. 다른 유형과 비교
String 및 int와 같은 다양한 유형과 비교할 때 약간의 주의가 필요합니다. Camel은 왼쪽의 유형을 1차 우선 순위로 사용합니다. 두 값을 해당 형식에 따라 두 값을 비교할 수 없는 경우 오른쪽 쪽 형식으로 대체할 수 있습니다.And fallback to the right hand side type if both values could not be compared based on that type.
즉, 값을 대체하여 특정 형식을 적용할 수 있습니다. 위의 bar 값이 문자열이라고 가정합니다. 그러면 방정식을 퍼뜨릴 수 있습니다:
simple("100 < ${in.header.bar}")
그러면 int 유형이 1st 우선 순위로 사용됩니다.
Camel 팀이 문자열 기반보다 숫자 유형을 선호하도록 바이너리 비교 작업을 개선하면 향후 변경될 수 있습니다. 숫자와 비교할 때 문제가 발생하는 String 유형이 가장 많습니다.
// testing for null simple("${in.header.baz} == null") // testing for not null simple("${in.header.baz} != null")
그리고 오른쪽 값이 또 다른 표현식인 더 많은 고급 예
simple("${in.header.date} == ${date:now:yyyyMMdd}") simple("${in.header.type} == ${bean:orderService?method=getOrderType}")
또한 포함된 예제로 제목에 Camel이라는 단어가 포함되어 있는지 테스트합니다.
simple("${in.header.title} contains 'Camel'")
또한 regex를 사용한 예제는 숫자 헤더가 4자리 값인지 테스트합니다.
simple("${in.header.number} regex '\\d{4}'")
마지막으로 헤더가 목록의 값 중 하나와 같은 경우입니다. 각 요소는 쉼표로 구분되어야 하며, 공백은 없어야 합니다.
Camel은 각 요소를 왼쪽 변의 유형으로 변환할 것이기 때문에 숫자 등에 대해서도 작동합니다.
simple("${in.header.type} in 'gold,silver'")
그리고 마지막 3을 위해, 우리는 또한 다음을 사용하지 않는 negate 테스트를 지원합니다.
simple("${in.header.type} not in 'gold,silver'")
그리고 유형이 특정 인스턴스인지 테스트할 수 있습니다(예: 문자열).
simple("${in.header.type} is 'java.lang.String'")
모든 Java .lang 유형에 대한 단점을
추가하여 다음과 같이 작성할 수 있습니다.
simple("${in.header.type} is 'String'")
또한 범위가 지원됩니다. 범위 간격에는 번호가 필요하며, 둘 다 및 끝에서 포함됩니다. 예를 들어 값이 100~199 사이의지 여부를 테스트할 수 있습니다.For instance to test whether a value is between 100 and 199:
simple("${in.header.number} range 100..199")
공백이 없는 범위에서 ..
를 사용합니다. 이는 Groovy와 동일한 구문을 기반으로 합니다.
Camel 2.9 부터 범위 값이 작은따옴표여야 합니다.
simple("${in.header.number} range '100..199'")