@Test publicvoidtest5(){ ArrayList arrayList = new ArrayList(); arrayList.setNames(Arrays.asList("woman", "man"));
ExpressionParser parser = new SpelExpressionParser(); Expression exp = parser.parseExpression("names[0]"); EvaluationContext evaluationContext = new StandardEvaluationContext(arrayList); // rootObject를 여기에 바로 쓸수도 있다. String message = exp.getValue(evaluationContext, String.class);
System.out.println(message); }
1
woman
값을 가져오는 것 말고도 값을 변경할수도 있습니다. 유의 해야할 점은 값을 추가해주는게 아닌 변경해주는 것입니다.
1 2 3 4 5 6 7 8 9 10 11 12
@Test publicvoidtest6(){ ArrayLists arrayLists = new ArrayLists(); arrayLists.setNames(Arrays.asList("man"));
ExpressionParser parser = new SpelExpressionParser(); Expression exp = parser.parseExpression("names[0]"); EvaluationContext evaluationContext = new StandardEvaluationContext(arrayLists); exp.setValue(evaluationContext, "woman");
값을 변경해주는 기능은 배열 뿐 아니라 일반 객체에서도 사용 가능합니다. 이때 필드는 public 이거나 setter 메소드가 구현되어 있어야 합니다.
1 2 3 4 5 6 7 8 9 10 11
@Test publicvoidtest7(){ SpELVO spELVO = new SpELVO("jesi");
ExpressionParser parser = new SpelExpressionParser(); Expression exp = parser.parseExpression("name"); EvaluationContext evaluationContext = new StandardEvaluationContext(spELVO); exp.setValue(evaluationContext, "sara");
System.out.println(spELVO.getName()); }
SpelParserConfiguration
SpelParserConfiguration를 사용 하면 Collection에서 index가 null일 경우에 자동으로 생성해주는 기능을 활성화 할수 있습니다.
아래의 예제에서는 배열에서 index가 null인 요소에 접근하려고 할때 자동으로 배열에 빈값이 추가된것을 확인 할수 있습니다. SpelParserConfiguration 생성자의 두번째 파라미터를 true로 전달하면 기능을 활성화 할수 있습니다(기본값은 두개 모두 false).
1 2 3 4 5 6 7 8 9 10 11 12
@Test publicvoidtest8(){ ArrayLists arrayLists = new ArrayLists();
SpelParserConfiguration configuration = new SpelParserConfiguration(false, true); ExpressionParser parser = new SpelExpressionParser(configuration); Expression expression = parser.parseExpression("names[4]"); String name = expression.getValue(arrayLists, String.class);
@Test publicvoidtestValidation(){ Event event = new Event(); // 타겟 객체 EventValidator eventValidator = new EventValidator(); // 검증 Validator
// BeanPropertyBindingResult는 Erros와 BindingResult의 구현체로써 보통은 웹에서는 MVC가 해당 객체를 생성하기 때문에 직접 생성할 일은 적다. Errors errors = new BeanPropertyBindingResult(event, "event");
CORS란 도메인 또는 포트가 다른 서버의 자원을 요청하는 매커니즘을 말합니다. 이때 요청을 할때는 corss-origin HTTP에 의해 요청됩니다.
이때 요청을 할때는 cross-origin HTTP에 의해 요청됩니다.
하지만 동일 출처 정책 때문에 CORS 상황이 발생시에 요청한 데이터를 브라우저에서 보안목적으로 차단합니다. 해당 문제를 해결하는 가장 쉬운 방법은 같은 도메인을 사용하는 것입니다. 하지만 요즘에는 각기 다른 용도로 사용되는 경우에는 개별 서버를 구축하기 때문에 이는 해결책이 될수 없습니다.
다른 해결방법은 서버에서 CORS 효청을 허용해주면 됩니다. 서버로 들어오는 모든 요청에 대해서 CORS 요청을 허용하기 위해서 Filter를 이용합니다.
HTTP Request 요청에 앞서 Preflight Request 라는 요청이 발생되는데, 이는 해당 서버에 요청하는 메소드가 실행 가능한지(권한 여부) 확인을 위한 요청입니다. Preflight Reuqest는 OPTIONS 메소드를 통해 서버에 전달됩니다(Allow-Methods 설정에서 OPTIONS를 허용해야 합니다).
Access-Control-Max-Age는 Preflight Request를 캐시할 시간입니다. 단위는 초입니다. 캐시를 하게 된다면 해당 시간이 지난 뒤에 재 요청을 하게 됩니다.
Access-Control-Allow-Origin
허용할 도메인을 설정할수 있습니다. 값은 *로 설정하면 모든 도메인에서 허용하는 것이고, 특정 도메인만 설정할수 있습니다.
스프링에서 제공하는 ApplicationEventPublisher를 이용해서 이벤트를 퍼블리싱 할수 있습니다. ApplicationEventPublisher는 스프링에서 Bean으로 등록 되어 있어 @Autowired로 바로 사용할수 있습니다. publishEvent 메소드를 통해서 퍼블리싱 하면 등록 된 리스너 객체가 호출되게 됩니다.