无法使用 POST 请求发送 JSON
Posted
技术标签:
【中文标题】无法使用 POST 请求发送 JSON【英文标题】:Can not send JSON using POST request 【发布时间】:2016-10-16 11:43:51 【问题描述】:这是我的控制器:
@RequestMapping(value = "", method = RequestMethod.POST)
public @ResponseBody ResponseEntity<String> create(
@RequestBody Category category)
if (categoryService.create(category))
return new ResponseEntity<String>(HttpStatus.OK);
else
return new ResponseEntity<String>(HttpStatus.NOT_FOUND);
这是我的配置:
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the $webappRoot/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<beans:bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<beans:property name="messageConverters">
<beans:list>
<beans:bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
</beans:list>
</beans:property>
</beans:bean>
<context:component-scan base-package="ru.tenet.cafe" />
这是类别类:
private Integer id;
private String title;
private String engTitle;
private String description;
private List<MenuItem> menuItems;
public Category()
public Category(Integer id, String title, String engTitle,
String description, List<MenuItem> menuItems)
super();
this.id = id;
this.title = title;
this.engTitle = engTitle;
this.description = description;
this.menuItems = menuItems;
// getters and setters
如果我尝试使用 Content-type:application/json 和以下正文发送 post 请求:
"id":8,"title":"Пицца","engTitle":"Pizza","description":null,"menuItems":["id":4,"title":"Пепперони ","engTitle":"Pepperoni","price":300.0,"description":"Сами лючщи пица слющи。 Тольки щто привезли дарагой.","consistOf":"E666, стальная стружка, вода (без ГМО)","volumeValue":500.0,"volumeTitle":"г","id":5,"title":"Маргарита","engTitle":"Margarita","price":400.0,"description ":"Сами сочни пица слющи。 Мамай клянус.","consistOf":"Перец, сыр, колбаска, ногти","volumeValue":500.0,"volumeTitle":"г","id":6,"title":"Кавказ","engTitle":"Kavkaz ji est","price":300.0,"description":"Вах пица. Сам ем дарагой.","consistOf":"Ароматизатор \"Гусь\" идентичный натуральному","volumeValue":500.0,"volumeTitle":"г"]
我会得到:
HTTP 状态 415。服务器拒绝此请求,因为请求 实体的格式不受请求的资源支持 请求的方法。
怎么了?
统一更新:
添加这个
@RequestMapping(value = "", method = RequestMethod.POST,consumes = MediaType.APPLICATION_JSON_VALUE,produces = "application/json")
给了我同样的结果
【问题讨论】:
在@RequestMapping 中添加produces = "application/json"
。请求时还要在请求中添加标头
在@RequestMapping
注解中添加consumes = MediaType.APPLICATION_JSON_VALUE
没有帮助。同样的事情。
@ViswanathLekshmanan,什么样的标题?内容类型?
是的。在请求中添加 Content-Type
【参考方案1】:
我遇到了同样的问题
我删除了@RequestBody 并改为使用字符串。在您的情况下,它将是 @Requestparam String 类别
现在类别将是 JSON 格式的字符串。现在使用 json 反序列化器并反序列化 json
注意:我承认这不是您当前问题的解决方案,但这是替代解决方案
【讨论】:
@Tony 你按照我说的做了吗? 默认情况下,如果 Content-Type 存在***.com/questions/30548822/…,它应该可以工作 @SpringLearner,我会试试的。我必须添加 org.json jar 并创建使用 json 的新构造函数。以上是关于无法使用 POST 请求发送 JSON的主要内容,如果未能解决你的问题,请参考以下文章
使用 Retrofit 发送 POST 请求并接收 Json 响应无法使用响应数据我需要将其传递给另一个活动
无法使用 axios 向 Flask 应用程序发送 POST 请求
ReactJS:无法在一次 POST 调用中发送 JSON 数据和 PDF 文件
无法将 ajax json 发布请求发送到 django 视图