HttpMediaTypeNotAcceptableException: не удалось найти приемлемое представление происходит в асинхронном режиме, а не в режиме синхронизации - PullRequest
0 голосов
/ 03 июня 2019

У меня есть 2 веб-сервлета, один запускается в режиме асинхронности:

@WebServlet(name="myServlet", urlPatterns={"/asyncprocess"}, asyncSupported=true)
@ConditionalOnProperty(name="app.processasynch", havingValue="true")
public class AsyncServletGW extends HttpServlet {

    @Autowired
    private Stage1WorkersPool wp;
    private static final Logger LOGGER = LoggerFactory.getLogger(ProcessBusinessLogicStage1Impl.class);

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{

        AsyncContext aCtx = request.startAsync(request, response);

        int paymentId = (new Random()).nextInt(100000);
        WorkerThread workerThread = wp.getPool().get(paymentId % wp.getNumWorkingThreads());
        ThreadUnitWorkImpl py = new ThreadUnitWorkImpl();
        String msgBody;

        if ("POST".equalsIgnoreCase(request.getMethod())){
            msgBody = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
            py.setXmlRequest(msgBody);
            py.setACtx(aCtx);
            aCtx.getResponse().setContentType("text/plain");
            py.setResponse(aCtx.getResponse());
        }else{
            LOGGER.error("Not a POST request");
        }


        LOGGER.debug("Servlet Processing : " + py.toString());
        workerThread.addUnitOfWork(py);
    }
}

А другой в режиме синхронизации

@WebServlet(name="myServlet", urlPatterns={"/syncprocess"})
@ConditionalOnProperty(name="app.processasynch", havingValue="false")
public class SyncServletGW extends HttpServlet {

    @Autowired
    private ProcessInSynchStages synchP;
    private static final Logger LOGGER = LoggerFactory.getLogger(ProcessBusinessLogicStage1Impl.class);

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{

        ThreadUnitWorkImpl py = new ThreadUnitWorkImpl();

        String msgBody;

        if ("POST".equalsIgnoreCase(request.getMethod())){
            msgBody = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
            response.setContentType("text/plain");
            py.setXmlRequest(msgBody);
            py.setResponse(response);
        }else{
            LOGGER.error("Not a POST request");
        }

        ArrayList<ThreadUnitWorkImpl> tuwList = new ArrayList<>();
        tuwList.add(py);
        synchP.runInSynch(tuwList);
    }
}

При вызове асинхронности я получаю печально известное исключение: Решено[org.springframework.web.HttpMediaTypeNotAcceptableException: не удалось найти приемлемое представление]

Во время отладки я заметил, что после первого вызова асинхронного сервлета второй, третий и т. д. всегда задерживаются.Через 1-2 секунды выдается указанное выше исключение, и сервлет обрабатывается.В режиме синхронизации, однако, все идет гладко ... какие-либо предложения?

1 Ответ

0 голосов
/ 04 июня 2019

Глупая ошибка с моей стороны ... Я забыл закрыть AsyncContext, запустив метоид complete () ....

...