【问题标题】:Spring boot restful web service. Xml response wrongly formattedSpring Boot 宁静的 Web 服务。 Xml 响应格式错误
【发布时间】:2019-04-15 02:37:24
【问题描述】:

我有一个简单的 Restful webService,使用 Spring Boot 2.1、Java 8,在 Eclipse Neon 上运行。我发送以下请求:

<patentListWrapper>
    <patentList>
        <patent>
            <guid>bbb</guid>
        </patent>
       <patent>
           <guid>ccc</guid>
       </patent>
    </patentList>
</patentListWrapper>

我得到以下(不正确的)响应:

<patentListWrapper>
    <patentList>
        <patentList>
            <guid>ddd</guid>
        </patentList>
       <patentList>
           <guid>eee</guid>
       </patentList>
    </patentList>
</patentListWrapper>

即我在响应中有 2 个专利列表元素,而不是一个内部专利元素,我不知道为什么。我映射请求的 2 个 POJO 类是:

public class PatentListWrapper {

private List<Patent> patents;

public List<Patent> getPatentList() {
    return patents;
}

public void setPatentList(List<Patent> patents) {
    this.patents = patents;
}   
}

和:

public class Patent {

private String guid;

public String getGuid() {
    return guid;
}

public void setGuid(String guid) {
    this.guid = guid;
}

public Patent() {
    super();
}
}

我的 REST 控制器类是:

@RestController
public class PndController {
@Autowired
ReadFromDb db;

@RequestMapping(value = "/guidRequest/xmlList", method = RequestMethod.POST, produces = { "application/xml", "text/xml" }, consumes = MediaType.ALL_VALUE )

public PatentListWrapper guidSearchList(@RequestBody  PatentListWrapper patentListWrapper) {
    System.out.println("DS in  guidSearchList()");

    patentListWrapper = db.readGuidsFromDb(patentListWrapper); // Set the guid in the patents List in patentListWrapper

    return patentListWrapper;
}
}

和 ReadFromDb 类:

@Repository
public class ReadFromDb {

public PatentListWrapper readGuidsFromDb(PatentListWrapper patentListWrapper) {
    List<Patent> patents=  patentListWrapper.getPatentList();
    for(Patent patent : patents) {
        patent.setGuid("aaa");
    }
    patentListWrapper.setPatentList(patents);
    return patentListWrapper;
}

}

我正在使用 windows ARC Advanced Rest Client 发送我的回复: Rest client 与 Content-type=application/xml

我已经确定 both PatentList 元素名称映射到 PatentListWrapper 中的 getPatentList()。如何获取响应信封以匹配请求信封?任何帮助表示赞赏。

【问题讨论】:

    标签: java rest maven spring-boot


    【解决方案1】:

    是的,只需创建具有相同变量名称的 getter setter 方法,如下所示,而不是为 getter setter 方法使用不同的名称

    private List<Patent> patents;
    
    public List<Patent> getPatents() {
     return patents;
    }
    
    public void setPatents(List<Patent> patents) {
     this.patents = patents;
    }
    

    或使用 GSON 并使用 @JsonProperty 并定义所需的值名称,如果您不使用 IDE 生成 getter 和 setter,则最好使用 lombok 插件。

    【讨论】:

    • @Thilanka_A_Weerasinghe 谢谢,但如果我这样做,我会在响应中返回 2 个专利元素(没有专利列表元素)
    • 也发布您的 ReadFromDb 课程。
    • @Thilanka_A_Weerasinghe 请求是 xml 格式,而不是 json,getter 和 setter 是由 IDE 生成的。
    • 请粘贴您的 ReadFromDb 类,是的,我可以看到那些在 xml 中,抱歉提到使用 GSON
    • @Thilanka_A_Weerasinghe ReadFromDb 添加
    猜你喜欢
    • 2019-03-17
    • 2015-07-19
    • 2016-12-17
    • 2015-11-09
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2016-11-20
    • 2011-12-10
    相关资源
    最近更新 更多