2014-06-18 2 views
-1

I HttpStatus 500 중첩 된 예외 java.lang.NullPointerException이
는 오류가 currencypojo.setAmount을 시작 여기 얻을 때 메신저 내가 디버그에 사용되는 다중 통화 변환기를 만들기로 얻었다 (BigDecimal.valueOf (이다 Integer.parseInt ((request.getParameter ("txtAmount"))))));MVC SPRING - org.springframework.web.util.NestedServletException : 요청 처리에 실패했습니다. 중첩 된 예외 java.lang.NullPointerException이

MultiCurrencyController.java

package com.multicurrency; 

import java.math.BigDecimal; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.springframework.web.servlet.ModelAndView; 
import org.springframework.web.servlet.mvc.AbstractController; 

public class MultiCurrencyController extends AbstractController{ 

    private MultiCurrencyPOJO currencypojo; 
    @Override 
    protected ModelAndView handleRequestInternal(HttpServletRequest request, 
      HttpServletResponse response) throws Exception { 
     currencypojo.setAmount(BigDecimal.valueOf(Integer.parseInt((request.getParameter("txtAmount"))))); 
     currencypojo.setCurrency(request.getParameter("currency")); 
     return new ModelAndView ("home","CurrencyInfo",currencypojo); 
    } 

    public void multiCurrencyPOJO(MultiCurrencyPOJO currencypojo){ 
     this.currencypojo=currencypojo; 
    } 
} 

MultiCurrencyPOJO.java 매개 변수 txtAmount가 HTTP 요청에 설정되지 않은 가능성이

package com.multicurrency; 

import java.math.BigDecimal; 



public class MultiCurrencyPOJO { 
    private String currency; 
    private BigDecimal amount; 

    public String getCurrency() { 
     return currency; 
    } 
    public void setCurrency(String currency) { 
     this.currency = currency; 
    } 
    public BigDecimal getAmount() { 
     return amount; 
    } 
    public void setAmount(BigDecimal amount) { 
     this.amount = amount; 
    } 

    public static BigDecimal getExchangeRate(String currency) { 
     return null; 

    } 
} 
+0

컨트롤러의 종료됩니다. 100 명의 사용자가'MultiCurrencyController'에 요청을하면 어떻게 될까요? 절대 상태를 유지하지 마십시오. –

답변

0

. 오류가 발생한 정확한 위치를 명확하게하기 위해 나머지 유형 변환과는 별도의 행으로 분리하여 명시 적으로 설정되어 있는지 확인하는 것이 좋습니다. 예를 들어

:

String txtAmount = request.getParameter("txtAmount"); 
if (txtAmount == null) { 
    throw new IllegalArgumentException("Expected HTTP request parameter txtAmount not present"); 
} 

currencypojo.setAmount(BigDecimal.valueOf(Integer.parseInt((txtAmount)); 

(또한, 나는 처음에 BigDecimal의 필요성에 의문 것 - 당신이 Integer에서 변환하고, 특히 이후,하지만 그 질문의 대상이 아니다 .)

0

어디 당신이이 개체와 그 intiali의 인스턴스가있는 경우 확인 MultiCurrencyPOJO

private MultiCurrencyPOJO currencypojo; 

위한 객체입니다 당신이 그들에 수술을하기 전에 zed. objetcs 개인 기본적으로

null에 intialized, 그래서 널의 모든 작업은 싱글 컨트롤러의 상태를 저장하는 결함이 NPE

+0

이미 @overide 앞에이 코드를 사용했습니다. private MultiCurrencyPOJO currencypojo; 인스턴스화에 이것을 사용했습니다. public void multiCurrencyPOJO (MultiCurrencyPOJO currencypojo) { this.currencypojo = currencypojo; } – pretzels04

+0

좋은 지적. 'multiCurrencyPOJO'()를 통해 명시 적으로 설정하지 않는 한, 매우 잘 될 수도 있습니다. – nullPainter

+0

관계없이 코드에 온 전성 검사를 추가하는 것은 결코 나쁜 생각이 아닙니다. currencypojo도 null이 아닌지 확인하십시오. 방어 적이며 무작위로 NPE보다는 합리적인 오류 메시지를받는 것이 좋습니다. – nullPainter

관련 문제