我有以下代码来获取带有 5 位小数的 double 值,但没有得到
@RequestMapping(value = "/double1/{double}", method = RequestMethod.GET)
@ResponseBody
public double getDouble1(@PathVariable("double")double dou){
System.out.println(dou);
return dou;
}
以下是输入输出
http://localhost:8080/svc/double1/4569999999999991.922222222333 ==> 4569999999999991
http://localhost:8080/svc/double1/4569999999999991.1234567 ==> 4569999999999991
最佳答案
Michael Laffargue 的链接问题 ( Spring MVC @PathVariable getting truncated ) 给出了答案 - double 中的 '.
' 被自动解析为文件扩展名(然后被 Spring MVC 解释为 Accept header )。您可以在 XML Spring 配置中禁用此后缀模式匹配:
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="useDefaultSuffixPattern" value="false" />
</bean>
或者在您的WebMvcConfigurerAdapter
中使用JavaConfig:
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUseSuffixPatternMatch(false);
}
由于精度损失,我还建议使用 BigDecimal
而不是 Jon Skeet 和 Michael 建议的 double
。
关于java - Rest Web 服务精确返回 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25725126/