我正在尝试在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"
。
感谢。
答案 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是否会起作用