Lorsque je déboguais une application Web accédant au serveur avec ajax, la réponse était étrange pour une raison quelconque. Ni le corps de la réponse ni l'en-tête HTTP ne sont renvoyés. J'ai enquêté sur la cause, alors je l'ai résumé.
Test.java
@RestController
public class TestController {
@RequestMapping(value = "/test.do", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public String test(HttpServletRequest request) throws Exception {
return "{ \"success\" : true }";
}
}
ajax.js
var req = new XMLHttpRequest();
req.open("POST", "test.do");
req.send();
--Parce que j'ai pu interrompre la méthode de test de TestController, il n'y a pas d'erreur dans l'URL
Quand je suis allé de plus en plus profond dans l'exécution de l'étape, une exception a été lancée dans
NioChannel.class``` dans tomcat-coyote.jar.
NioChannel.class
/**
* This method should be used to check the interrupt status before
* attempting a write.
*
* If a thread has been interrupted and the interrupt has not been cleared
* then an attempt to write to the socket will fail. When this happens the
* socket is removed from the poller without the socket being selected. This
* results in a connection limit leak for NIO as the endpoint expects the
* socket to be selected even in error conditions.
*/
protected void checkInterruptStatus() throws IOException {
if (Thread.interrupted()) {
throw new IOException(sm.getString("channel.nio.interrupted"));
}
}
Cette exception a été interceptée dans la couche supérieure et réécrite en réponse à l'erreur.
true``` quand un thread est interrompu.
Il n'y a pas de processus particulier qui provoque une interruption, donc parlant d'une interruption qui peut se produire dans cette situation ...
** Rupture par débogueur **.
Quand je l'ai essayé, il a sûrement donné une réponse étrange seulement quand il s'est cassé.J'avais une trace de pile de cette exception sur la console à chaque fois, mais je l'ignorais car elle retournait 200. Si cela ressemble à une erreur, vous ne pouvez pas l'ignorer. Mais je pense que c'est un piège terrible.
Recommended Posts