[SPRING] Spring MVC Controller NumberFormat BigDecimal의 주석 패턴 문제
SPRINGSpring MVC Controller NumberFormat BigDecimal의 주석 패턴 문제
여러 BigDecimal RequestParams를 사용하는 스프링 컨트롤러가 있습니다.
내 응용 프로그램 로케일은 en_US이지만이 컨트롤러 메서드의 경우 de_DE 로캘에서 이러한 BigDecimal 매개 변수를 바인딩하고 변환해야합니다 (예 : #. ###, ##> DOT, 소수점 구분 기호는 COMMA).
이러한 BigDecimal 값은 UI 텍스트 상자에서 나오며 이미 de_DE 형식입니다. 다음은 다음 오류로 인해 실패하는 컨트롤러 코드입니다.
@RequestMapping(value = "/create", method = RequestMethod.POST)
public ModelAndView create(@RequestParam("referenceNumber") String referenceNumber, @RequestParam("startDate") @DateTimeFormat(pattern="dd-MM-yyyy") Date startDate, @RequestParam("amount1") @NumberFormat(pattern = "#.###,##") BigDecimal amount1, @RequestParam("amount2") @NumberFormat(pattern = "#.###,##") BigDecimal amount2) {
// Do something and return
}
봄은 어떻게 든 내 numberformat 패턴을 무시합니다. DateTimeFormat 주석은 예상대로 작동합니다. startDate 매개 변수를 올바른 형식으로 파싱합니다.
어떤 도움을 주시면 감사하겠습니다.
감사.
해결법
-
==============================
1.PropertyEditorSupport를 사용하여 다음과 같이 양식 입력을 처리 할 수 있습니다.
PropertyEditorSupport를 사용하여 다음과 같이 양식 입력을 처리 할 수 있습니다.
PropertyEditorSupport를 확장하는 클래스를 작성해, 클라이언트로부터받는 String를 BigDecimal로 변환합니다. 예를 들면 다음과 같습니다.
import java.beans.PropertyEditorSupport; import java.math.BigDecimal; import java.text.NumberFormat; import java.text.ParseException; import java.util.Locale; public class BigDecimalEditor extends PropertyEditorSupport { public void setAsText(String text) { NumberFormat formatter = NumberFormat.getNumberInstance(Locale.GERMAN); try { Number number = formatter.parse(text); BigDecimal bigDecimal = BigDecimal.valueOf(number.doubleValue()); setValue(bigDecimal); } catch (ParseException e) { // handle exception here } } }
그리고 다음과 같이 컨트롤러와 바인딩하십시오.
@RestController @RequestMapping(value = "/employee") public class EmployeeController { @InitBinder public void initBinder(WebDataBinder binder) { binder.registerCustomEditor(BigDecimal.class, new BigDecimalEditor()); } @RequestMapping(value = "/create", method = RequestMethod.POST) public ModelAndView create( @RequestParam("amount") @NumberFormat(pattern = "#.###,##") BigDecimal amount) { System.out.println(amount); return new ModelAndView(); } }
-
==============================
2.나는 내 문제를 해결했다 : @RequestParam (value = "amount1", required = false) @NumberFormat (패턴 = "# 0,00") BigDecimal amount1
나는 내 문제를 해결했다 : @RequestParam (value = "amount1", required = false) @NumberFormat (패턴 = "# 0,00") BigDecimal amount1
from https://stackoverflow.com/questions/42056112/spring-mvc-controller-numberformat-annotation-pattern-issue-in-bigdecimal by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 인증 전에 Spring Security에서 X509 인증 취소 상태 확인 (0) | 2019.07.19 |
---|---|
[SPRING] Spring Boot에서 ActiveMQ 포트를 설정하는 방법은 무엇입니까? (0) | 2019.07.19 |
[SPRING] @Repository 주석은 상속 되나요? (0) | 2019.07.19 |
[SPRING] Spring + Hibernate @autowired가 ConstraintValidator에서 null이다. (0) | 2019.07.19 |
[SPRING] Oauth2 : 잘못된 액세스 토큰 (0) | 2019.07.19 |