#java #spring-boot #api #rest #abstract-class
Вопрос:
Я пытаюсь начать с SpringBoot и Java, и мой проект заключается в реализации этого XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:local xmlns:ns2="http://test.com/v21/" xmlns:ns3="uri">
<messageHeader>
<logon>nm</logon>
<password>@85</password>
</messageHeader>
<messageBody>
<IssueClientRequest>
<irrevocable>YES</irrevocable>
<applicable_rules>LATE</applicable_rules>
</IssueClientRequest>
</messageBody>
</ns3:local>
Я создал поэтому некоторые сущности с абстрактным классом, потому что IssueClientRequest, IssueClientAmended и т.д. Могут отличаться, но структура xml останется прежней .
@JsonSubTypes(value = {
@JsonSubTypes.Type(value = IssueClientRequest.class, name = "IssueClientRequest")
})
public abstract class Instr {}
@XmlRootElement(name = "IssueClientRequest")
public class IssueClientRequest extends Instr {
@XmlElement(name = "irrevocable", required = true)
private String irrevocable;
@XmlElement(name = "applicable_rules", required = true)
private String applicable_rules;
}
@JsonSubTypes(value = {
@JsonSubTypes.Type(value = MessageIssueClientRequest.class, name = "IssueClientRequest")
})
public abstract class Message {
@XmlElementWrapper(name="ns3")
private MessageHeader messageHeader;
public MessageHeader getMessageHeader() {
return messageHeader;
}
public void setMessageHeader(MessageHeader messageHeader) {
this.messageHeader = messageHeader;
}
}
public class MessageIssueClientRequest extends Message {
@XmlElementWrapper(name="messageBody")
@XmlElement(name="IssueClientRequest", type= IssueClientRequest.class)
private Instr instr;
public Instr getInstr() {
return instr;
}
public void setInstr(Instr instr) {
this.instr = instr;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "messageHeader")
public class MessageHeader {
@XmlElement(name = "logon", required = true)
private String logon;
@XmlElement(name = "password", required = true)
private String password;
public String getLogon() {
return logon;
}
public void setLogon(String logon) {
this.logon = logon;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
@RestController
public class InstrController {
@RequestMapping(value="/instr",method = RequestMethod.POST, consumes = {MediaType.APPLICATION_XML_VALUE})
Message newMessage(@RequestBody Message message) {
System.out.println(message.getMessageHeader().getLogon());
return message;
}
}
У вас есть идеи, в чем может быть проблема ? Архитектура одна ?
Большое спасибо за вашу помощь.