如何在Spring控制器中请求请求的来源和正文

时间:2018-03-09 15:12:37

标签: java spring rest

我正在使用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相似的注释?。

我的第二个问题是通常作为回应在这些后期方法中返回的正确对象。

4 个答案:

答案 0 :(得分:1)

你应该能够从HttpServletRequest对象中获取头文件和uris

public XXX createMyObject(@RequestBody String data, HttpServletRequest request)

至于响应,我会说返回String,它可以是一个视图名称,您可以传递一些属性,表示操作是否成功,或者是ModelAndView。

答案 1 :(得分:1)

回答你的问题:

  1. 如果在方法参数中包含HttpServletRequest,则可以从那里获取原始信息。例如

    public XXX createMyObject(@Requestbody String data, HttpServletRequest request) {
            String origin = request.getHeader("origin");
            //rest of code...
    

    }

  2. 对于其他响应,您需要返回对象(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