发表于: 2017-08-04 15:04:16

1 1073


今日完成:

调试完成Article后台接口


明日计划:

写职位接口


遇到问题:

调试新增接口时,posman提示:HTTP ERROR 415,控制台没反应,debug进不去。

百度了下错误415,通常会有以下情况:

415的含义是不支持的媒体类型(Unsupported media type)

1.有一个强制用post请求的接口,用了非post请求

2.post请求参数设置,是不是必须的,是否是json格式

3.header中是否包含正确的Content-Type


首页第一种情况排除,第二种POST请求参数设置,因为使用了@RequestBody注解所以请求参数必须是json格式

@RequestMapping(value = "/a/u/article", method = RequestMethod.POST)
public String addArticle(HttpServletResponse response, HttpServletRequest request, ModelMap model, @RequestBody Article article) throws Exception {

而我用posman使用form表单key value的形式请求参数是不对的,会报错:HTTP ERROR 415


改变请求方式:在posman中Headers使用Content—Type application/json格式

Body中选择raw JSON(application/json)

把请求参数换成json格式


运行后添加成功



新增数据时,页面有要求必填项。这个必填项是在代码中实现还是在数据中设置为NOT NULL。有什么区别?



收获:

@RequestBody和@ResponseBody注解是Spring 3.X版本添加内容


作用:

@RequestBody将HTTP请求正文转换为合适的HttpMessageConveter对象。

@ResponseBody将内容或对象作为HTTP响应正文返回,并调用合适HttpMessageConverter的Adapter转换对象,写入输出流


使用时机:

@ResponseBody返回的数据不是html标签的页面,而是其他某种格式的数据时(如:json、xml)使用

@RequestBody  POST、PUT的请求数据是JSON格式或者XML格式,而不是普通的键值对形式。


HttpMessageConverter接口需要开启<mvc:annotation-driven/>


Spring的配置

需要添加三个配置:

  1. <context:component-scan base-package="org.zlex.json.controller" />  
  2. <context:annotation-config />  
  3. <mvc:annotation-driven />


pom.xml配置

  1. <dependency>  
  2.         <groupId>org.springframework</groupId>  
  3.         <artifactId>spring-webmvc</artifactId>  
  4.         <version>3.1.2.RELEASE</version>  
  5.         <type>jar</type>  
  6.         <scope>compile</scope>  
  7.     </dependency>  
  8.     <dependency>  
  9.         <groupId>org.codehaus.jackson</groupId>  
  10.         <artifactId>jackson-mapper-asl</artifactId>  
  11.         <version>1.9.8</version>  
  12.         <type>jar</type>  
  13.         <scope>compile</scope>  
  14.     </dependency>


实体类里需要一个空的构造函数用于转换对象时初始化


HttpMessageConverter提供了接口5个方法:另外它们可以自定义(有空再研究吧)

canRead:判断该转换器是否能将请求内容转换成Java对象 
canWrite:判断该转换器是否可以将Java对象转换成返回内容 
getSupportedMediaTypes:获得该转换器支持的MediaType类型 
read:读取请求内容并转换成Java对象 
write:将Java对象转换后写入返回内容







返回列表 返回列表
评论

    分享到