如何使用response.senderror返回json

时间:2013-12-02 02:49:11

标签: spring-mvc

在我的应用程序中,我使用springMVC和tomcat,我的控制器返回对象,但是当出现问题时,我只想返回一些带有内容tye json的字符串消息,所以我使用了response.error,但它不起作用,返回的是一个HTML。 我的控制员:

@RequestMapping(value = "{id}/{name}" ,method=RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)

public @ResponseBody UserBean  login(@PathVariable String id,@PathVariable("name") String userName,
        @RequestHeader(value = "User-Agent") String user_agen,
        @CookieValue(required = false) Cookie userId,
        HttpServletRequest request,HttpServletResponse response,@RequestBody UserBean entity
        ) throws IOException {
     System.out.println("dsdsd");
     System.out.print(userName);

     response.setContentType( MediaType.APPLICATION_JSON_VALUE);
     response.sendError(HttpServletResponse.SC_BAD_REQUEST, "somethind wrong");
     return  null;

1 个答案:

答案 0 :(得分:1)

根据HttpServletReponse#sendError方法的Javadoc:

  

使用指定的状态向客户端发送错误响应。的的   服务器默认创建响应看起来像   包含指定消息的HTML格式的服务器错误页面,   将内容类型设置为“text / html”,保留cookie等   标题未经修改......

因此sendError将使用您提供的消息生成HTML错误页面,并将内容类型覆盖为text/html

由于客户端期望JSON响应,您可能最好使用UserBean上的字段手动设置响应代码和消息 - 假设它可以支持它。然后将序列化为您的客户端Javascript可以评估的JSON响应。

@RequestMapping(value = "{id}/{name}" ,method=RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody UserBean  login(@PathVariable String id,@PathVariable("name") String userName,
        @RequestHeader(value = "User-Agent") String user_agen,
        @CookieValue(required = false) Cookie userId,
        HttpServletRequest request,HttpServletResponse response,@RequestBody UserBean entity
        ) throws IOException {
     System.out.println("dsdsd");
     System.out.print(userName);

     response.setContentType( MediaType.APPLICATION_JSON_VALUE);
     response.setStatus(HttpServletResponse.SC_BAD_REQUEST);

     UserBean userBean = new UserBean();
     userBean.setError("something wrong"); // For the message
     return userBean;

还可以选择使用Tomcat属性org.apache.coyote. USE_CUSTOM_STATUS_MSG_IN_HEADER,它将消息放入自定义响应头中。有关详细信息,请参阅this postthe Tomcat docs