我正在使用Java和Spring构建REST API,我需要在我的控制器中处理POST请求,但我需要从该请求中提取主体,这是一个JSON,也是"来源& #34;该请求,
@RequestMapping(value = "/create", method = RequestMethod.POST)
public XXX createMyObject(@RequestBody String data, YYY){
MyObject mo = new MyObject();
mo.setData = data;
mo.setOrigin = yyy;
myRepository.save(mo);
return XXX;
}
我有几个问题:首先是我如何获得该请求的来源(我猜这是一个在标题中传播的网址?),是否有与@RequestBody相似的注释?。
我的第二个问题是通常作为回应在这些后期方法中返回的正确对象。
答案 0 :(得分:1)
你应该能够从HttpServletRequest对象中获取头文件和uris
public XXX createMyObject(@RequestBody String data, HttpServletRequest request)
至于响应,我会说返回String,它可以是一个视图名称,您可以传递一些属性,表示操作是否成功,或者是ModelAndView。
答案 1 :(得分:1)
回答你的问题:
如果在方法参数中包含HttpServletRequest
,则可以从那里获取原始信息。例如
public XXX createMyObject(@Requestbody String data, HttpServletRequest request) {
String origin = request.getHeader("origin");
//rest of code...
}
对于其他响应,您需要返回对象(json)或HttpStatus的表示,以通知客户端调用是否成功。例如
Return ResponseEntity<>(HttpStatus.ok);
答案 2 :(得分:1)
试试这个:
@RequestMapping(value = "/create", method = RequestMethod.POST)
public XXX createMyObject(HttpServletRequest request, @RequestBody String body) {
String origin = URI.create(request.getRequestURL().toString()).getHost();
System.out.println("Body: " + body + " Origin:" + origin);
return XXX;
}
答案 3 :(得分:0)
@自动连线 私有HttpServletRequest servletRequest;
您可以声明请求对象,然后在方法中访问以获取Uri