Upload de imagem profile photo e associar ao atributo “profilePhoto” na entidade User com Spring

Galera tenho um entidade dessa forma:

Estou usando Spring Boot e no Postman para instanciar novos objetos da classe User

    @EqualsAndHashCode(onlyExplicitlyIncluded = true)
    @Entity
    @Table(name = "tb_users")
    public class User implements Serializable {
        private static final long serialVersionUID = 1L;

        @EqualsAndHashCode.Include
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "cod_user")
        private Long id;

        @Column(name = "name")
        private String name;

        @Column(name = "gender")
        private String gender;

        @Column(name = "birthday")
        private LocalDate birthday;

        @OneToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "cod_address", unique = true)
        private Address address;

        private ??? profilePhoto;

Minha dúvida é: Como fazer o upload de uma imagem e associar ao atributo profilePhoto, pra quando eu for instanciar um novo objeto já poder inserir essa imagem de perfil na criação do usuário?

OBSERVAÇÃO: Não estou usando Spring MVC ou Thymeleaf, apenas o Spring Boot e fazendo as requisições via Postman, que no caso para criar uma nova instancia estou passando um JSON:

    {
        "name": "Gui",
        "gender": "male",
        "birthday": "1998-12-12",
        "address":{
            "address": "Rua da Neves",
            "city": "Niterói",
            "state": "Rio de Janeiro",
            "postalCode": "579777-90",
            "country": "Brazil"
        },
        "profilePhoto": ???

Como eu posso passar no meu User Controller uma forma de criar essa imagem e associar ao atributo profilePhoto?

    @PostMapping("/create")
    @ResponseStatus(HttpStatus.CREATED)
    public Person create(@RequestBody Person person) { 
        return personService.create(person); 
    }

Na sua entidade, vc pode:

  • usar um array de bytes
private byte[] profilePhoto;
  • usar String, caso vc queira armazenar a foto na base64.

Sobre passar os dados junto com a photo, veja esse link: https://blogs.perficient.com/2020/07/27/requestbody-and-multipart-on-spring-boot/

Eu consegui fazer o upload das imagens com Amazon S3, como eu faria para associar essa imagem ao meu atributo “profilePhoto” da entidade User?

Do jeito que tinha colocado, a imagem ficaria armazenada na propria tabela de usuário (o que pode ser bom e ruim, dependendo do sistema).

Como vc armazenou na S3, teria que ver se vc consegue usar alguma referência da imagem lá para gravar na tabela de usuários. Não tenho muita experiência com S3, mas veja se ela fornece algum ID, nome, etc., que vc consiga usar para recuperar a imagem.

Já consegui resolver! Obrigado pela atenção, quem tiver com essa dúvida pode entrar em contato comigo.