2013-08-08 3 views
0

SpringFramework를 처음 사용합니다. SimpleFormController를 확장하는 컨트롤러를 만들었습니다. 또한 몇 개의 String 필드와 두 개의 List<String> 필드가있는 명령 클래스를 만들었습니다.NumberFormatException을 디버깅하는 방법 BaseCommandController.bindAndValidate 어딘가에

양식은 PHP 생성 페이지에있는 이전 PHP 의해 procesed 하였다. 이 애플리케이션의 일부가 PHP가 더 이상 처리 할 수없는 커다란 스프레드 시트를 생성하므로 자바로 처리를 이동하려고합니다.

어쨌든 양식에 숫자 필드가 없습니다.

exception 

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NumberFormatException: For input string: "" 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
root cause 

java.lang.NumberFormatException: For input string: "" 
    java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    java.lang.Integer.parseInt(Integer.java:504) 
    java.lang.Integer.parseInt(Integer.java:527) 
    org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:991) 
    org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:924) 
    org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:76) 
    org.springframework.validation.DataBinder.applyPropertyValues(DataBinder.java:692) 
    org.springframework.validation.DataBinder.doBind(DataBinder.java:588) 
    org.springframework.web.bind.WebDataBinder.doBind(WebDataBinder.java:191) 
    org.springframework.web.bind.ServletRequestDataBinder.bind(ServletRequestDataBinder.java:112) 
    org.springframework.web.servlet.mvc.BaseCommandController.bindAndValidate(BaseCommandController.java:394) 
    org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:266) 
    org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) 
    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 

스택 추적 내 클래스 중 하나를 포함하지 않는 나는 그것을 디버깅하는 방법을 아무 생각이 : 나는 양식을 제출하면 그래도, 나는 NumberFormatException이 얻을. 여기

public class ExportCommand { 
    private String ifs_login; 
    private String exp_sales_price_group_id_sp_ip_pl; 
    private List<String> exp_catalog_group; 
    private List<String> exp_vendor_no_pps; 
    private String exp_price_list_no_pl; 
    private String exp_contract; 
    private String exp_language_code_spl; 
    private String exp_active_ind_sp = ""; //those are checkboxes with "Y" as checked value, so I initialize them to empty strings if they are unchecked. 
    private String exp_desc = ""; 
    private String exp_customs = ""; 
    private String exp_ordered = ""; 

//here goes default getters and setters 
} 

가 크롬 개발자 도구에서 볼 나의 형태 : 여기

내 명령 클래스의 IT와 함께 ...

ifs_test:MAGE 
exp_sales_price_group_id_sp_ip_pl:MOLEX 
exp_catalog_group[]: 
exp_price_list_no_pl:MOLEX 
exp_contract:VER 
exp_language_code_spl: 

소스 형태 :

ifs_test=MAGE&exp_sales_price_group_id_sp_ip_pl=MOLEX&exp_catalog_group%5B%5D=&exp_price_list_no_pl=MOLEX&exp_contract=VER&exp_language_code_spl= 

편집 :

내 컨트롤러는 다음과 같습니다 :

public class ExportController extends org.springframework.web.servlet.mvc.SimpleFormController { 

    @Override 
    protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception { 
     //.... 
    } 
} 

무엇이 잘못 되었나요?

답변

0

빈 문자열 ""Integer으로 바꾸려는 NumberFormatException이 표시됩니다. 예외를 throw 할 때 중단 점을 설정하고 스택 추적을 설정하여 설정하려고 시도한 것을 확인합니다. 특히, BeanWrapperImpl의 스택 변수는 예외가 발생할 때 처리되는 대상 속성을 알려줍니다.

대부분은 String을 포함하는 일부 데이터 형식이 해당 필드가 Integer 유형의 데이터 형식에 자동으로 적응하려고 시도하고 있으며 버그 또는 옵션 값으로 누락되었습니다. 이 오류가 발생했을 때 액세스하려는 컨트롤러 메소드의 서명은 무엇입니까?

+0

:'BeanWrapperImpl'은 자바 빈즈가 점점 설정하지 주요 봄 반사 유틸리티 클래스입니다. 이와 같은 스택 트레이스의 중간에서 볼 때마다, Spring은 들어오는 URI를'@ RequestParam's로 변환하거나 POJO 컨트롤러 리턴 타입을 풀기와 같은 자동 형 적응의 중간에있다. 전망. – chrylis

+0

감사합니다. 예외를 throw하는 순간 Netbeans에서 중단 점을 설정하는 방법을 알고 있습니까? 내 코드 또는 처리되지 않은 예외에만 중단 점을 설정할 수 있습니다. 첫 번째 경우는 no-go입니다. 예외가 내 코드 외부로 던져지기 때문에 두 번째 경우는 실행을 늦게 중지하고 이로부터 유용한 것을 얻을 수 없습니다. – SWilk

+2

가장 이상한 것은 컨트롤러와 명령 클래스에 정수가 하나도 없다는 것입니다. – SWilk

1

답변을 찾았습니다. 문제는 수정없이 PHP 폼을 직접 사용하려고 시도했기 때문입니다. PHP는 입력 또는 선택 상자의 이름에 접미사가 [] 인 경우에만 데이터 배열을 양식으로 처리합니다. 그들은 물론 field[1]이나 field[some_text_index]과 같이 대괄호 안에 색인을 붙일 수 있지만 대개 괄호는 공백으로 남겨 둡니다.

스프링이 'exp_catalog_group []'필드 이름을 List<String> exp_catalog_group 필드의 이름으로 매핑하려했는데 sqare brackets에서 색인을 추출하려고 시도한 것 같습니다. 이 색인은 목록의 경우 Integer이어야하지만 빈 문자열입니다.

시스템의 PHP 부분에있는 <select> 이름을 exp_catalog_group으로 변경해야했으며 현재 작동 중입니다.

바보 초보자의 실수 :

당신이 봄에 익숙하기 때문에
관련 문제