'Hateoas possibly adding "type" class to my json rseponse
I'm using spring-hateoas (i know i am using an old version, have to use this one to maintain spring4 dependencies in check) paired with MapStruct and for some reason when i generate the GenericEntity to build the Response it adds my dto classname into a "type" string:
UserController.java:
@Path("users")
@Component
public class UserController {
@Autowired
private UserService userService;
@Autowired
private UserAssembler userAssembler;
@Context
private UriInfo uriInfo;
@GET
@Produces(value = MediaType.APPLICATION_JSON)
public Response listUsers() {
final List<User> users = userService.list();
return Response.ok(new GenericEntity<List<UserDto>>(userAssembler.toResources(users)){}).build();
}
}
UserAssembler.java:
@Component
public class UserAssembler extends JaxRsResourceAssemblerSupport<User, UserDto> {
private final UserMapper mapper = Mappers.getMapper(UserMapper.class);
public UserAssembler() {
super(UserController.class, UserDto.class);
}
@Override
public UserDto toResource(User entity) {
UserDto user = createResourceWithId(entity.getUserId(), entity);
UserDto result = mapper.userToUserDto(entity);
result.add(user.getLinks());
return result;
}
}
JaxRsResourceAssemblerSupport.java:
public abstract class JaxRsResourceAssemblerSupport<T, D extends ResourceSupport>
extends ResourceAssemblerSupport<T, D> {
private final Class<?> controllerClass;
public JaxRsResourceAssemblerSupport(Class<?> controllerClass, Class<D> resourceType) {
super(controllerClass, resourceType);
this.controllerClass = controllerClass;
}
@Override
protected D createResourceWithId(Object id, T entity) {
Preconditions.checkNotNull(entity);
Preconditions.checkNotNull(id);
D instance = instantiateResource(entity);
instance.add(JaxRsLinkBuilder.linkTo(controllerClass).slash(id).withSelfRel());
return instance;
}
}
UserDto.java:
public class UserDto extends ResourceSupport {
private Long userId;
private String name;
private String surname;
private String username;
private String email;
private Integer fileNumber;
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getFileNumber() {
return fileNumber;
}
public void setFileNumber(Integer fileNumber) {
this.fileNumber = fileNumber;
}
}
Finally, this is the source that MapStruct generates for mapping the user:
public class UserMapperImpl implements UserMapper {
@Override
public UserDto userToUserDto(User user) {
if ( user == null ) {
return null;
}
UserDto userDto = new UserDto();
userDto.setUserId( user.getUserId() );
userDto.setName( user.getName() );
userDto.setSurname( user.getSurname() );
userDto.setUsername( user.getUsername() );
userDto.setEmail( user.getEmail() );
userDto.setFileNumber( user.getFileNumber() );
return userDto;
}
@Override
public User userDtoToUser(UserDto userDto) {
if ( userDto == null ) {
return null;
}
User user = new User();
user.setName( userDto.getName() );
user.setSurname( userDto.getSurname() );
user.setUsername( userDto.getUsername() );
user.setEmail( userDto.getEmail() );
user.setFileNumber( userDto.getFileNumber() );
user.setUserId( userDto.getUserId() );
return user;
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|

