在我的应用程序中,我使用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;
答案 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 post和the Tomcat docs。