2015-08-18 54 views
0

我的控制器中有一個POST方法,它應該從AJAX POST創建一個新的Object。Spring:從HttpServletRequest訪問參數返回null

我創建了一個工廠方法,它將從HttpServletRequest填充對象。但是,在提交請求時,由於NullPointerException在處理來自請求對象的參數時工廠方法失敗。

我已經看到了幾個帖子在Stackoverflow,似乎無法找到我的代碼有問題。通常的建議似乎是我只需在我的簽名中添加一個HttpServletRequest,並且Spring將自動連接該對象。

它確實創建了一個請求對象,但創建的請求不包含任何參數。

@RestController 
@RequestMapping("/lead") 
@ComponentScan(basePackages = { "ch.company.app.backend" }) 
public class EventLeadController { 
    @Autowired 
    EventLeadRepository leadRepository; 

    @RequestMapping(value = "/", method = RequestMethod.POST, headers = "content-type=application/x-www-form-urlencoded") 
    public void saveLead(HttpServletRequest request) { 
    System.out.println("Country: " + request.getParameter("country")); // returns "Country: null" 
    EventLeadFactory leadFactory = new EventLeadFactory(); 

    EventLead lead = leadFactory.createFromHttpServletRequest(request); 

    leadRepository.save(lead); 
    }; 
} 
+0

你需要包括代碼構造POST –

+0

你試過公共無效saveLead(@RequestBody ModelClass模型)??(JavaScript的?) –

+0

@AmitMishra這將意味着我不再需要Factory類,對吧?相反,我將不得不提出一個映射到實際Java類的JSON請求,還是我誤解了某些內容?無論如何直接訪問當前請求的'HttpServletRequest'? – Ahatius

回答

0

請使用@RequestBody註解。 例子:

public void saveLead(@RequestBody Model model) 
+0

如果我這樣做,我會得到一個'400壞請求'。我是否認爲我必須在方法簽名中指定我的'EventLead'對象,而不是'HttpServletRequest'? – Ahatius

+0

是的,如果你這樣做,它會創建你從客戶端發送到java對象的json請求。 – Jaydatt

相關問題