У меня есть следующий код, чтобы получить double с 5-значным десятичным, но не получающим
@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
Связанный с Майклом Лаффаргом вопрос (Spring MVC @PathVariable, усеченный) имеет ответ - .
'в double автоматически анализируется как расширение файла (а затем интерпретируется Spring MVC как заголовком Accept). Вы можете отключить это сопоставление шаблонов суффикса в любой конфигурации XML Spring:
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="useDefaultSuffixPattern" value="false" />
</bean>
или с помощью JavaConfig в вашем WebMvcConfigurerAdapter
:
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUseSuffixPatternMatch(false);
}
Я бы также рекомендовал использовать BigDecimal
вместо double
как предложил Джон Скит и Майкл, из-за потери точности.
double
. Вы пробовали использоватьBigDecimal
вместо этого?