I think it's too late but :
Here method I use from other stackoverflow users, And I don't remember which post is it.
From Javascript you can use method like this :
    let xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function () {
        if (this.readyState != 4) return;
        if (this.status == 200) {
            alert(this.responseText);
            var data = JSON.parse(this.responseText);
        }
    };
    xhr.open("POST", url, true);
    xhr.setRequestHeader('Content-Type', 'application/json');
    xhr.send(JSON.stringify({answers}));
Than from Server in Servlet you just need read all content with this method and after that grab data you need.
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.json.HTTP;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
@WebServlet(name = "T", value = "/T")
public class WebExam extends HttpServlet {
       @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        JSONObject resp = new JSONObject();
        StringBuffer jb = new StringBuffer();
        String line = null;
        try {
            BufferedReader reader = request.getReader();
            while ((line = reader.readLine()) != null)
                jb.append(line);
        } catch (Exception e) { /*report an error*/ }
        try {
            JSONObject jsonObject = HTTP.toJSONObject(jb.toString());
            response.getWriter().println(jsonObject.toString());
        } catch (JSONException e) {
            // crash and burn
            response.getWriter().println("unknown!");
        }
}