Spring Boot Restful Web服务。 XML响应格式错误

时间:2018-11-12 11:19:23

标签: java rest maven spring-boot

我有一个使用Spring Boot 2.1,Java 8的简单Restful web服务,该服务在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个PatentList元素,而不是内部的Patent元素,我不知道为什么。我的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 Controller类是:

@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

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

1 个答案:

答案 0 :(得分:0)

这是真的,只需使用如下相同的变量名创建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插件。