Spring:响应REST-ful API调用

时间:2014-07-03 10:00:41

标签: java spring rest java-ee spring-mvc

我正在尝试在y应用程序中实现REST API端点。

@Controller
 public class HerokuController {

    @RequestMapping(value = "/heroku/resources/", method = RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)
    public  ResponseEntity<JSONObject> provision(@RequestBody JSONObject body){
        System.out.println("called! \n");
        JSONObject response = new JSONObject();
        response.put("id", 555);
        response.put("message", "Provision successful!");
          return new ResponseEntity<JSONObject>(response,HttpStatus.OK);        
    }

所以我写了这个类,其中包含一个映射为(heroku / ressources)的方法。 但是当我尝试调用它时,我收到404错误,因为找不到/WEB-INF/heroku/resources.jsp。但是,我甚至不想获得视图而是HTTP响应。

有人能告诉我一般应该修改哪个配置文件告诉Spring这个控制器不想发回一个视图而是一个HTTP响应吗?

但是,如果我将其更改为此方法,则调用该方法:

@RequestMapping(value = "/heroku/resources/", method = RequestMethod.POST)
    public  ModelAndView provision(final HttpServletRequest request){
            System.out.println("called! \n");
            JSONObject response = new JSONObject();
            response.put("id", 555);
            response.put("message", "Provision successful!");
            final Map<String, Object> result = new HashMap<String, Object>();
          return new ModelAndView("jsonView",result);   
    }

所以将返回类型更改为"ModelAndView"

感谢。

2 个答案:

答案 0 :(得分:2)

您错过了@ResponseBody

@RequestMapping(value = "/heroku/resources/", method = RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody ResponseEntity<JSONObject> provision(@RequestBody JSONObject body){
    System.out.println("called! \n");
    JSONObject response = new JSONObject();
    response.put("id", 555);
    response.put("message", "Provision successful!");
      return new ResponseEntity<JSONObject>(response,HttpStatus.OK);        
}

答案 1 :(得分:0)

我曾经遇到过同样的问题,为了解决你可以使用@RestController而不是@controller(这会默认发送Json)你可以像这样定义你的方法

@RequestMapping(value = "/heroku/resources/", method = RequestMethod.POST)
public JsonOut provision(@RequestBody JsonIn json)

我总是使用我将从客户端获得的值以及输出的定义来创建我的对象

实施例

public class JsonOut{

    protected String id;
    protected String message;

    ...set ....get

}

你必须在spring xml文件中输入这两个值

<mvc:annotation-driven />

<context:annotation-config/> 

使用此配置,您将始终拥有json!

这将适用于春季4,我不知道春天3是否会起作用