2014-06-18 70 views
-1

我的HTTPStatus 500嵌套异常,并显示java.lang.NullPointerException
IM制作多币种转换我用来调试时,它来到这里的错误开始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

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

它是可能的参数txtAmount没有设置在HTTP请求。为了更准确地了解错误发生的位置,我建议将其分成与其他类型转换分开的一行,并明确检查它是否已设置。

例如:

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

哪里是你Object对MultiCurrencyPOJO

private MultiCurrencyPOJO currencypojo; 

确保当你有此对象及其intiali的实例在你对它们进行操作之前先进

默认情况下,私人objetcs被初始化为null,所以在空的任何操作将结束NPE

+0

我已经在@overide 专用MultiCurrencyPOJO currencypojo之前在我的代码中使用了该代码; 并用于实例 public void multiCurrencyPOJO(MultiCurrencyPOJO currencypojo){this.currencypojo = currencypojo; } – pretzels04

+0

好点。这可能也是null,除非通过'multiCurrencyPOJO'()明确地设置它。 – nullPainter

+0

无论如何,在您的代码中添加完整性检查绝对不是一个坏主意。检查currencypojo也不为空。善于防守,在随机线路上获得明智的错误信息而不是NPE。 – nullPainter

相关问题