发表于: 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的配置
需要添加三个配置:
- <context:component-scan base-package="org.zlex.json.controller" />
- <context:annotation-config />
- <mvc:annotation-driven />
pom.xml配置
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>3.1.2.RELEASE</version>
- <type>jar</type>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>org.codehaus.jackson</groupId>
- <artifactId>jackson-mapper-asl</artifactId>
- <version>1.9.8</version>
- <type>jar</type>
- <scope>compile</scope>
- </dependency>
实体类里需要一个空的构造函数用于转换对象时初始化
HttpMessageConverter提供了接口5个方法:另外它们可以自定义(有空再研究吧)
canRead:判断该转换器是否能将请求内容转换成Java对象
canWrite:判断该转换器是否可以将Java对象转换成返回内容
getSupportedMediaTypes:获得该转换器支持的MediaType类型
read:读取请求内容并转换成Java对象
write:将Java对象转换后写入返回内容
评论