【问题标题】:SPRING REST controller - return image AND json valuesSPRING REST 控制器 - 返回图像和 json 值
【发布时间】:2019-06-06 04:43:47
【问题描述】:

我已经使用 SPRING 和 Hibernate 构建了一个 REST Web 服务。 我有 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
}

【问题讨论】:

    标签: spring hibernate rest jpa


    【解决方案1】:

    在注释中,produce 设置为 MediaType.IMAGE_JPEG_VALUE,然后您的代码将响应作为用户对象返回。结果它抛出了这个异常,因为 spring 期望你的代码只返回 JPEG 类型的文件。

    我可以在这里建议什么,使用 produces = MediaType.APPLICATION_JSON_VALUE,并将您的图像从 byte[] 转换为 base64 字符串,然后将响应作为 json 对象返回

    【讨论】:

    • 是的,抱歉,这是完整的日志:org.springframework.web.HttpMediaTypeNotAcceptableException: 找不到可接受的表示。
    猜你喜欢
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 2016-02-29
    • 2015-08-14
    • 2017-02-16
    相关资源
    最近更新 更多