2014-12-03 38 views
0

如果我發送的數據是這樣的:如何將json和表單提交請求映射到同一個控制器?

$.ajax({ 
     url: $fooForm.action, 
     data: $fooForm.serialize(),   
     type: 'POST', 
     success: function(data) { console.log(data); } 
    }); 

這可以通過具有以下簽名控制器接收:

public ResponseEntity<Map<String, Object>> checkEligibility( Person person) 

在另一種情況下,我送這樣的請求:

$.ajax({ 
     url: $fooForm.action, 
     data: $fooForm.serialize(), 
     dataType: 'json', 
     type: 'POST', 
     success: function(data) { console.log(data); } 
     }); 

這可以由具有以下簽名的控制器接收:

public ResponseEntity<Map<String, Object>> checkEligibility(@RequestBody Person person) 

我要編寫能夠同時接受JSON的POST以及簡單的POST一個方法,並給我同樣的Person對象

+0

你沒有JSON POST在你的問題的模式,只有形成帖子。 – zeroflagL 2014-12-04 08:44:40

回答

0

您可以使用多態,使此功能工作。

所以,你需要創建一個BaseController。

@Controller 
public class BaseController 


    public ResponseEntity<Map<String, Object>> checkEligibility(final Person person) { 
     Map<String, Object> body = new HashMap<String, Object>(); 
     body.put("person", person); 
     ResponseEntity<Map<String, Object>> entity = new ResponseEntity<Map<String,Object>>(body, HttpStatus.OK); 
     // write some logic here ... 
     return entity; 
} 

接下來,你需要創建RestController

@Controller 
@RequestMapping(value = "/eligibility") 
public class RestController extends BaseController { 

    @Override 
    @ResponseBody 
    @RequestMapping(method = RequestMethod.POST, headers = { "content-type=application/json" }) 
    public ResponseEntity<Map<String, Object>> checkEligibility(final @RequestBody Person person) { 
     return super.checkEligibility(person); 
    } 

} 

之後,創建斯坦達特控制器

@Controller 
@RequestMapping(value = "/eligibility") 
public class StandartController extends BaseController { 

    @Override 
    @ResponseBody 
    @RequestMapping(method = RequestMethod.POST) 
    public ResponseEntity<Map<String, Object>> checkEligibility(final @ModelAttribute Person person) { 
     return super.checkEligibility(person); 
    } 

} 

現在,這應該工作。

1

如果X WWW的形式,進行了urlencoded POST是一個基於瀏覽器的HTML表單應用程序的一部分,不要做這個

您應該使用POST重定向-GET與HTML形式的圖案。否則,當用戶在他們的瀏覽器中刷新刷新時,他們會得到令人討厭的彈出窗口。

這是從根本上有分歧與一個REST API

+0

這是一個AJAX請求,那麼POST-Redirect-GET有什麼意義? – zeroflagL 2014-12-04 08:46:08

相關問題