服务器端代码如下:
@RequestMapping(value = "/test")
@ResponseBody
public Result test(){
result.setSuccess(true);
result.setData(new Random().nextDouble() + System.currentTimeMillis());
return result;
}
chorme的network截图如下,发现两次请求返回的内容是同一个
请求一
请求二
经过多次试验,发现请求是都走到Controller里,但是第一次请求的响应数据没有马上返回给浏览器端,而是和第二次请求的响应一起返回给了前端,并且第一次请求的响应内容居然是第二次响应的内容。
有时候两次请求的响应能不相同,有时候却相同,不知道是什么原因。
我的实际应用场景是,前台上传多个附件,但是本质是多次上传,然后由后台返回此文件在数据库中的文件id。然后我发现有时上传多个文件时,返回的文件id都是同一个。
如下图所示:两个上传的文件长度是不一样的
文件一
文件二
但是服务器返回的文件id却是一样的:
文件一
文件二
文件一
请求消息
响应消息
文件二
请求消息
响应消息
Essayez d'ajouter un horodatage pour empêcher la mise en cache après l'URL demandée par le navigateur
Après avoir lu les commentaires, c'est peut-être le cas. Jetez un œil au code de réponse. Si c'est 304, ce sera le même que la dernière fois. Étant donné que l'URL demandée est la même, vous pouvez ajouter un paramètre aléatoire (horodatage) à la demande pour mettre en cache les données utilisées par le navigateur afin de garantir que l'URL est incohérente à chaque fois.
Regardez le journal du contrôleur Spring MVC pour voir si l'heure à laquelle la requête atteint le serveur est la même milliseconde
Chef, vous êtes à nouveau ici, essayez d'utiliser
System.nanoTime()
pour voir la valeur de retour.En raison du manque d'informations importantes telles que les données de la requête (s'agit-il d'une requête GET ou d'une requête POST ? Comment ces deux requêtes sont-elles initiées ? Comment le code client correspondant est-il écrit ?), ce qui suit n'est qu'une supposition personnelle :
Conjecture basée sur 1,1 , vos deux requêtes sont initiées sur le serveur presque en même temps
2 Sur la base de la conjecture 1,
new Random().nextDouble() + System.currentTimeMillis()
on peut presque considérer que la différence n'est pas grande (surtout lors de tests locaux) ;3. Vous utilisez Utiliser double pour stocker ce nombre aléatoire, et Jackson peut alors perdre en précision lors de la sérialisation de la valeur double (veuillez rechercher vous-même le problème de perte de précision de js), donc côté client, vos deux valeurs semblent être exactement les mêmes ;
La méthode de vérification hypothétique est la suivante :
Jetez un œil aux résultats de sortie et utilisez JSON.parse (la valeur enregistrée) dans la console du navigateur pour voir s'ils sont identiques.Solution : Utilisez une chaîne pour stocker ce nombre aléatoire. Voici une méthode que j'ai écrite moi-même pour générer plusieurs chiffres de nombres aléatoires (java8) :
Quant au problème après votre ligne de démarcation, il n'y a pas de code et ne peut pas être analysé.Côté serveur, imprimez les paramètres de chemin d'URL demandés sur la console. Les deux requêtes imprimées sur le serveur doivent être exactement les mêmes, afin que le serveur les traite comme une seule requête. Vous pouvez essayer la méthode System.nanoTime();