Spring boot Rest API

di il
23 risposte

23 Risposte - Pagina 2

  • Re: Spring boot Rest API

    Si aspetta di riceverlo tramite form-data .
    Tramite richiesta POST
  • Re: Spring boot Rest API

    giupeppe8989 ha scritto:


    Si aspetta di riceverlo tramite form-data .
    Tramite richiesta POST
    Se devi fare con il RestTemplate una request HTTP che è di nuovo un file "upload" (content-type "multipart/form-data"), sì, si può fare.
    Non ti so dire i passi esatti a memoria (non è una cosa che si fa tutti i giorni...), se cerchi in rete trovi sicuramente dei pezzi di codice.
    Per dubbi specifici, chiedi.
  • Re: Spring boot Rest API

    Esatto... è quello che devo fare...
    ma dove inserisco la request HTTP di tipo POST con RestTemplate?
    sempre nel @Restcontroller? o nel main? oppure nel @service?
  • Re: Spring boot Rest API

    giupeppe8989 ha scritto:


    Esatto... è quello che devo fare...
    ma dove inserisco la request HTTP di tipo POST con RestTemplate?
    sempre nel @Restcontroller? o nel main? oppure nel @service?
    Nel main() come metodo, ovviamente NO. Se farlo nel controller o in un service .... dipende. Sono più questioni di "design". Avresti un service specifico per la gestione di questa richiesta (e eventuali altre) al secondo server?
    Insomma: come hai delineato gli "strati" della applicazione?
  • Re: Spring boot Rest API

    Io ho fatto una cosa del genere con Resttemplate ma ho un dubbio... ho fatto tutto nel controller...
    Forse devo creare anche una classe @service e metterci tutta la parte resttemplate all interno?

    Inoltre, qualcuno sa spiegarmi cosa è un @Bean e perche se non lo inserisco non posso utilizzare @Autowired?
    Bisogna inserirlo in controller?
  • Re: Spring boot Rest API

    Mistergsk ha scritto:


    Io ho fatto una cosa del genere con Resttemplate ma ho un dubbio... ho fatto tutto nel controller...
    Forse devo creare anche una classe @service e metterci tutta la parte resttemplate all interno?
    Dipende. A livello del controller hai sicuramente in mano un oggetto di tipo MultipartFile. Intenderesti passarlo pari-pari ad un service? I service (in teoria) non dovrebbero "sapere" nulla del lato web (MultipartFile è un concetto "web"). Quindi sarebbe meglio separare i concetti.

    Mistergsk ha scritto:


    Inoltre, qualcuno sa spiegarmi cosa è un @Bean e perche se non lo inserisco non posso utilizzare @Autowired?
    Bisogna inserirlo in controller?
    Innanzitutto @Autowired serve in una classe gestita da Spring per ricevere l'iniettamento di un certo oggetto "dipendente" gestito sempre da Spring. Ma questo oggetto da qualche parte deve essere creato.
    Spring può istanziare gli oggetti a fronte di varie cose:
    - tramite auto-scanning dei package per trovare classi annotate @Component, @Service, ecc...
    - quando si usa la "vecchia" XML configuration tramite le dichiarazioni con <bean>
    - con la nuova Java configuration con @Bean (che è l'equivalente del tag <bean> nei XML)

    @Bean generalmente si usa nelle classi annotate @Configuration, perché vengono trattate in modo speciale da Spring. Tecnicamente, @Bean si può usare anche in classi NON @Configuration, come nei @Component, @Service ecc... ma così @Bean funziona in modalità "lite", come dice la documentazione. I dettagli sono nella reference ufficiale:
  • Re: Spring boot Rest API

    Si ho un Multipart... Tipo questo codice l’ho messo tutto nel controller...
    Ma non dovrei inserirlo in una classe @service?
    
    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Collections.singletonList(MediaType.MULTIPART_FORM_DATA));
    
    HttpEntity<String> entity = new HttpEntity<>("body", headers);
    
    restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
    
  • Re: Spring boot Rest API

    Questo metodo dovrebbe fare una richiesta POST a un server esterno (metto l'URL nella apposita stringa)...
    Però quando lo avvio, da postman inserisco l'immagine come form-data da Body e mi restituisce un JSON con errore 400 bad request...
    come risolvo?
    Forse manca il MultiValueMap?

    
    
    	@RequestMapping(method = RequestMethod.POST, value = "/detect", produces = MediaType.APPLICATION_JSON_VALUE)
    	public ResponseEntity<String> uploadImage(@RequestParam(name="image", required=true) MultipartFile file) {
    		
    		    
    		    HttpHeaders httpHeaders = new HttpHeaders();
    			httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
    			
    			HttpEntity<?> requestEntity = new HttpEntity<>(httpHeaders);
    
    		  
    		    ResponseEntity<String> responseEntity =
    		                restTemplate.exchange(emotions_url,
    		                		HttpMethod.POST,
    		                		requestEntity,
    		                		String.class);
    		        
    		    
    	        String response = responseEntity.getBody();
    		    
    		    	return new ResponseEntity<String>(response, HttpStatus.OK);
    		}
    		
    
  • Re: Spring boot Rest API

    giupeppe8989 ha scritto:


    Però quando lo avvio, da postman inserisco l'immagine come form-data da Body e mi restituisce un JSON con errore 400 bad request...
    Giusto solo per chiarire: per fare da Postman un "classico" file-upload, devi:

    - mettere ovviamente POST
    - nella sezione Body impostare (*) form-data
    - mettere una key (nel tuo caso si chiama image)
    - scegliere a fianco File (non Text)
    - poi nel value usare il Select File per selezionare un file da uploadare
Devi accedere o registrarti per scrivere nel forum
23 risposte