Я использую аннотацию @JsonView
для вывода упрощенной версии сложного объекта в Spring MVC.
Представление:
public class UserView {
public interface Summary {}
}
Класс сущности:
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "name", length = 255)
@JsonView(UserView.Summary.class)
private String name;
Метод ресурса:
@GetMapping(value = "users", produces = {MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_UTF8_VALUE})
@JsonView(UserView.Summary.class)
public List<User> getAllUsers() {
return userRepository.findAllBy();
}
Это прекрасно работает при выводе JSON:
[
{"name": "User 1"},
{"name": "User 2"}
]
Но когда для "Content-Type" установлено значение XML, возвращается следующий вывод:
<List>
<item>
<name>User 1</name>
</item>
<item>
<name>User 2</name>
</item>
</List>
Я хотел бы иметь <Users>
вместо <List>
и <User>
вместо <item>
, но я не смог найти способ изменения этих родовых c имен. Я пробовал аннотации типа @XmlRootElement(name="user")
или @XmlElementWrapper(name="users")
, но не повезло.