2014-12-03 36 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

相关问题