2014-09-08 1 views
1

je code suivant pour obtenir le double avec 5 chiffres décimaux, mais pas obtenirRest retour de service Web double avec précision

@RequestMapping(value = "/double1/{double}", method = RequestMethod.GET) 
    @ResponseBody 
    public double getDouble1(@PathVariable("double")double dou){ 
     System.out.println(dou); 
     return dou; 
    } 

sortie suivant l'entrée

http://localhost:8080/svc/double1/4569999999999991.922222222333 ==> 4569999999999991 
http://localhost:8080/svc/double1/4569999999999991.1234567 ==> 4569999999999991 
+0

Quelle API? Jersey ? –

+3

Vous avez 16 chiffres avant la virgule - je suppose que vous attendez trop de 'double '. Avez-vous essayé d'utiliser 'BigDecimal' à la place? –

+0

Si vous utilisez Spring MVC, jetez un oeil à la deuxième réponse ici: http://stackoverflow.com/questions/3526523/spring-mvc-pathvariable-getting-truncated Pourrait être la cause de la suppression automatique après le point –

Répondre

1

question liée Michael Laffargue (Spring MVC @PathVariable getting truncated) a la réponse - le '.' dans le double est automatiquement analysé comme l'extension du fichier (et ensuite interprété par Spring MVC comme un en-tête Accept). Vous pouvez désactiver ce modèle suffixe correspondant dans chaque configuration XML Spring:

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> 
    <property name="useDefaultSuffixPattern" value="false" /> 
</bean> 

ou en utilisant JavaConfig dans votre WebMvcConfigurerAdapter:

@Override 
public void configurePathMatch(PathMatchConfigurer configurer) { 
    configurer.setUseSuffixPatternMatch(false); 
} 

Je vous recommande également d'utiliser un BigDecimal au lieu d'un double comme suggéré par Jon Skeet et Michael, en raison de la perte de précision.