XML-ответ с JAXB и проекцией интерфейса - PullRequest
0 голосов
/ 14 сентября 2018

Я хочу вернуть XML ответ подмножества сущностей.Я использую JAXB вместе с интерфейсом проекции и Spring JPA.Моя сущность:

@Entity
@Table(name = Constants.ENTITY_TABLE_PREFIX + "ENTRY")
public class Entry implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@Column(name = "customer", nullable = true)
private String customer;

@Column(name = "ip_address", nullable = false)
private String ip_address;

/* Constructors, setters, getters */

}

Теперь мой репозиторий EntryDAO Класс:

//This is an example for a Spring Data JPA repository
@RepositoryRestResource(exported = false)
public interface EntryDAO extends JpaRepository<Entry, Long> {

  @Query("SELECT distinct e.customer as name from Entry e")
  public List<CustomerDto> findCustomer();

  @XmlRootElement
  @XmlAccessorType(XmlAccessType.NONE)
  public interface CustomerDto {

   @XmlAttribute
   public String getName();

  }

 }

и конечная точка:

@RestController
public class EntryXMLEndpoint {

@Autowired
private IEntryXMLService service;

@RequestMapping(value = "/restxml", produces = { "application/xml" })
public CustomerDto findCustomers() {

  List<CustomerDto> o = service.findCustomer();

  CustomerDto record = o.get(0);

  return record;
}

}

Работает нормально, если я выбираювернуть ответ json, но при создании xml выдает "XML Parsing Error: element not found error".Любой отзыв будет полезен.

1 Ответ

0 голосов
/ 14 сентября 2018

Вместо этого вы можете использовать выражение конструктора JPA.

@Query("SELECT new <YourPackageName>.CustomerDto(e.customer) from Entry e group by e.customer")
public List<CustomerDto> findCustomer();

и DTO как класс

@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class CustomerDto {

  private String name;

  public CusomterDto(String name) {
      this.name = name;
  } 

  @XmlAttribute
  public String getName();

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...