Контроллер SPRING REST - возврат изображения и значения json - PullRequest
0 голосов
/ 11 января 2019

Я построил веб-сервис отдыха, используя SPRING и Hibernate. У меня есть 2 объекта: изображение и пользователь, связанные с аннотацией oneToOne.

Когда я пытаюсь вернуть данные пользователя и изображение, соответствующее этому пользователю, я получаю эту ошибку: "org.springframework.web.HttpMediaTypeNotAcceptableException: не удалось найти приемлемое представление"

Когда я делаю это отдельно, он работает нормально, но когда я делаю это по одному маршруту, я получаю эту ошибку.

Вот мой контроллер:

@CrossOrigin(
    origins = "*", 
    methods = {RequestMethod.POST, RequestMethod.GET, RequestMethod.OPTIONS, RequestMethod.DELETE}, 
    allowedHeaders = "*")
@RestController
@RequestMapping(path = "/user")
public class UserController {

    @Autowired
    UserRepository userRepository;

    @Autowired
    ImageRepository imageRepsository;



    doesn't work-->  @RequestMapping(value="/{userId}/getUserAndImage",method=RequestMethod.GET,produces = MediaType.IMAGE_JPEG_VALUE )
    public Optional<User> getUserAndImage(@PathVariable Long userId) {

    return userRepository.findById(userId);
}

    works fine--> @RequestMapping(value="/{userId}/image", method=RequestMethod.GET, produces = MediaType.IMAGE_PNG_VALUE)
public byte[] getUserImage(@PathVariable Long userId) {
    byte[] image = (imageRepsository.findImageWithUserId(userId)).getImage();

        return image;
}

Вот сущности:

Пользователь:

@Entity
@Table(name="users")
public class User {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;

@NotNull
@Size(max=100)
@Column
private String nom;

@NotNull
@Size(max=250)
@Column
private String prenom;


@OneToOne(fetch=FetchType.EAGER,
          cascade = CascadeType.PERSIST)
private Image image;

//getters and setters
}

Изображение объекта:

@Entity
@Table(name="images")
public class Image {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name="image")
@Lob
private byte[] image;

@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name="user_id")
private User user;

//getters and setters
}

1 Ответ

0 голосов
/ 11 января 2019

в аннотации, производит , установленный как MediaType.IMAGE_JPEG_VALUE, затем ваш код возвращает ответ как пользовательский объект. В результате он генерирует это исключение, потому что spring ожидает, что ваш код будет возвращать только файл типа JPEG.

Что я могу предложить здесь, используйте yield = MediaType.APPLICATION_JSON_VALUE , и преобразуйте ваше изображение из байта [] в строку base64, а затем верните ответ в виде объекта json

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