SPRING REST控制器-返回图像和JSON值

时间:2019-01-11 09:19:06

标签: spring hibernate rest jpa

我已经使用SPRING和Hibernate构建了一个REST Web服务。 我有2个实体:图像和用户,并与oneToOne注释链接。

当我尝试返回用户详细信息以及与此用户对应的图像时,出现此错误: “ org.springframework.web.HttpMediaTypeNotAcceptableException:找不到可接受的表示形式”

当我单独进行操作时,它可以正常工作,但是当我在一条路线中进行操作时,会出现此错误。

这是我的控制器:

var result = files.Where(i => codes.Any(y => i.Contains(y)).ToList();

以下是实体:

用户实体:

@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
}

1 个答案:

答案 0 :(得分:0)

在注释中,产生设置为MediaType.IMAGE_JPEG_VALUE,然后您的代码将响应作为用户对象返回。结果,它抛出该异常,因为spring希望您的代码仅返回JPEG类型的文件。

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