Back-End/Java

[Java] JavaFX WebView에서 Axios, fetch 사용시 서버로 Body를 전달하지 못하는 문제

유자맛바나나 2023. 3. 28. 02:31

1. Trouble

Java8의 JVM 환경에서 동작하는 JavaFX의 WebView에서는 Axios, fetch, Ajax 등의 기능을 제한적으로만 사용할 수 있어 Http Body를 넣을 수 없다

 

2. Root cause

  • JavaFX의 WebView에서 제공하는 javascript 런타임 엔진은 JVM에 있다. 그리고 java 8버전의 javascript 런타임 엔진은 'Nashorn'이다.
  • 문제는, Nashorn은 순수한 ES5.1 스펙(ECMAScript)을 구현한 순수 javascript 엔진이라는 점이다. 그렇기 때문에 Axios (ES6에 도입된 Promise 기반), fetch (ES6부터 내장 라이브러리), Ajax(XMLHttpRequest 기반이며 순수 javascript가 아님) 셋 다 각각의 이유로 제한적으로만 사용할 수 있다. 제한된 기능 중 하나가 Body를 넣지 못하는 것이다.
  • Axios에서는 data 속성에, fetch에서는 body 속성에 각각넣을 수 있으나 Spring API 메서드에서 파라미터로 HttpServletRequest를 받은 후 request.getinputStream()을 이용해 body를 읽어보면 아무런 값이 들어오지 않는 것을 알 수 있다.
  • *Reference
    https://blog.codecentric.de/project-nashorn-javascript-jvm-polyglott
    -> Nashorn is only a Java Script Engine 부분 볼 것

3. Shooting

userAgent를 통해 JavaFX일 경우 console.log로 simui에 log Fileld를 전달한 후, simui에서 Spring server로 요청을 보낸다