在我的应用程序中,我使用springMVC和tomcat,我的控制器返回对象,但是当出现问题时,我只想返回一些内容为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;
Run Code Online (Sandbox Code Playgroud)
根据该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;
Run Code Online (Sandbox Code Playgroud)
还可以选择使用 Tomcat 属性org.apache.coyote. USE_CUSTOM_STATUS_MSG_IN_HEADER
,将消息放入自定义响应标头中。请参阅这篇文章和Tomcat 文档以获取更多信息。
归档时间: |
|
查看次数: |
5968 次 |
最近记录: |