当前位置: 首页 > 知识库问答 >
问题:

如何反演到不同的@RequestBody对象类型?

韩刚洁
2023-03-14

我在我的web服务中使用Spring,它接收XML作为输入。它可以是HTTP请求中嵌入的XML,也可以是请求属性中的纯文本。

@RequestMapping(value={"/mypath"}, method={RequestMethod.POST}, headers={"content-type=application/x-www-form-urlencoded"})
@ResponseBody
public ResponseObject getResponse(@RequestParam("request") String request, HttpServletRequest req) {

它工作得很好,与请求字符串我可以解马歇尔到Foo对象或Bar对象。

问题来自于XML的盗用:

@RequestMapping(value={"/mypath"}, method={RequestMethod.POST}, headers={"content-type=text/xml"})
@ResponseBody
public ResponseObject getResponse(@RequestBody Foo request, HttpServletRequest req) {

@RequestMapping(value={"/mypath"}, method={RequestMethod.POST}, headers={"content-type=text/xml"})
@ResponseBody
public ResponseObject getResponse(@RequestBody Bar request, HttpServletRequest req) {
<bean id="marshallingHttpMessageConverter" class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
    <property name="marshaller" ref="jaxb2Marshaller" />
    <property name="unmarshaller" ref="jaxb2Marshaller" />
</bean>
<oxm:jaxb2-marshaller id="jaxb2Marshaller" contextPath="path.to.Foo:path.to.Bar"/>

共有1个答案

仲孙宇定
2023-03-14

@requestmapping中必须有某种东西使每个请求方法唯一,在您的示例中,两个基于xml的请求映射完全相同--参数的类型是在框架使用@requestmapping找到正确的方法后确定的。因此,从本质上讲,您所说的是不可行的,除非您在注释中有更多的内容来帮助框架找到正确的方法。

如果您使用的是Spring3.1+,您可以做以下一个小的简化:

@RequestMapping(value={"/mypath"}, method={RequestMethod.POST}, consumes=text/xml)
 类似资料:
  • 我使用带有WebFlux的Spring boot 2.0.1作为Rest服务器。 在我RestController我想自动反序列化一个对象(产品)。但是我得到一个杰克逊错误,好像参数名称模块没有注册。 原因:com.fasterxml.jackson.databind.exc.Invalid定义异常:无法构建的实例(没有像默认构造一样的Creator):无法从对象值(没有基于委托或属性的Creat

  • 我想实现一个功能,其中请求映射到正确的对象。是否有一种方法(除了自定义反序列化器)可以将请求按类型/基数映射到适当的对象?任何见解都将不胜感激!

  • 问题内容: 我是android和java的初学者。我不明白什么时候对象传递。对象传递当然需要实现Serializable。 0.什么时候使用Serializable?它是什么? 1.什么是对象和捆绑类 2.使用Object和Bundle传递对象时 3.是否支持Object和Bundle对象都是数据类型的对象? 请帮助我。谢谢 问题答案: 您的要求确实很模糊,但是可序列化的对象可以转换为可以反序列化

  • 我像这样接收JSON 当然,我实现了包含所有字段和类的类Track、Album和Playlist 顺便说一句,我不能改变JSON。所以我需要一个代码来解析它。

  • 问题内容: 我有一个Web服务的结果,该结果返回布尔值或单例映射,例如 布尔结果: 地图结果: 单独地,我可以轻松地映射这两个位置,但是我该如何做呢? 基本上我想将其映射到一个类: 所有所有多态示例都用于基于数据中的属性进行映射,但是在这种情况下,我没有该选项。 编辑 代码的更新部分: 问题答案: 不不不。您不必编写自定义解串器。只需先使用“无类型”映射: 给出“定级” 价值或“定级”价值(采用第