티스토리 뷰

반응형

변수를 키로 사용하여 맵에서 값을 조회하려고 합니다. 변수를 직접 참조할 수 있기를 원 jobTitle하지만(이 경우 ), 어떤 이유로 변수 를 작동시키려면 #root.또는 를 접두사로 사용해야 #this.합니다. 그래서 이것은 작동합니다:

parser.parseExpression("{ \"Manager\":\"37.5\", \"CEO\":\"40\"}[#root.jobTitle]"

("37.5"로 해결)

하지만 이것은하지 않습니다

parser.parseExpression("{ \"Manager\":\"37.5\", \"CEO\":\"40\"}[jobTitle]"

(널로 해석됨)

jobTitle컨텍스트 개체의 루트 속성입니다. SpEL 문서를 보면 속성을 직접 참조할 수 있어야 하는 것 같습니까? 내가 뭔가 잘못하고 있습니까?

아래 전체 작업 코드

public static void main(String[] args) {
    ExpressionParser parser = new SpelExpressionParser();
    Employee employee = new Employee("Joe Bloggs", "Manager");
    Expression exp = parser.parseExpression(
            "{ \"Manager\":\"37.5\", \"Ceo\":\"40\"}[#root.jobTitle]");
    StandardEvaluationContext context = new StandardEvaluationContext(employee);
    context.setRootObject(employee);
    System.out.println(exp.getValue(context, String.class));
}

static class Employee {
    private String firstName;
    private String jobTitle;

    Employee(String firstName, String jobTitle) {
        this.firstName = firstName;
        this.jobTitle = jobTitle;
    }

    public String getJobTitle() {
        return jobTitle;
    }
}

 

 

SpEL 문서를 보면 속성을 직접 참조할 수 있어야 하는 것 같습니까?

이것은 아래의 경우에 맞으며 둘 다 "Manager"를 인쇄합니다.

System.out.println(parser.parseExpression("#root.jobTitle").getValue(context, String.class));
System.out.println(parser.parseExpression("jobTitle").getValue(context, String.class));

그러나 내부 표현 []의 경우 처리가 다릅니다. SpEL에 대한 언어 사양이 없기 때문에 동작을 기반으로 설명할 수 있습니다. 당신이 달릴 때

System.out.println(parser.parseExpression(
           "{\"jobTitle\":\"37.5\"}[jobTitle]").getValue(context, String.class));

이것은 실제로 "37.5"를 인쇄합니다( [jobTitle]로 처리됨 [\"jobTitle\"]). 작성자는 Map의 값에 쉽게 접근할 수 있도록 하기로 했으며 #root.jobTitle, 루트 객체를 참조할 때 with를 지정해야 하는 단점이 있습니다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함