Salve a tutti.
Sto lavorando su Spring, con cui ho creato un progetto Boot, il cui scopo è esporre alcuni servizi REST per l'accesso al database.
In particolare, ho scritto una classe che espone alcuni servizi, tra cui il seguente:
codice:
@RequestMapping(value = "/saveContact", method = RequestMethod.POST)
public ResponseEntity<Contact> saveContact(@RequestBody Contact contact) {
System.out.println("saveContact");
try {
repository.save(contact);
return new ResponseEntity<>(contact, HttpStatus.CREATED);
}
catch (Exception e) {
System.out.println(e.getMessage());
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
L'oggetto repository è definito come rappresentante della seguente interfaccia:
codice:
package it.biagio.repository;
import org.springframework.data.repository.CrudRepository;
import it.biagio.entities.Contact;
public interface ContactInterface extends CrudRepository<Contact, Integer> {
public Iterable<Contact> findByUserId(int id);
}
Ho testato il metodo saveContact usando Postman e passando, come body di una richiesta POST, un file in formato JSON:
codice:
{
"name": "daisy",
"surname": "duck",
"telephone": "5656565",
"email": "daisy@paperopoli.it",
"user": {
"id": 1,
"username": "paolino",
"password": "paperino"
}
}
Ora, vorrei che un'applicazione web (sempre creata in Spring, che lavora su Tomcat 9), basata su servlet, fosse in grado di leggere i dati di un nuovo contatto da una form, creare un testo JSON correttamente formattato e sfruttare il servizio REST della prima applicazione per il salvataggio nel DB.
La servlet, pertanto, dopo aver creato il JSON, invoca la seguente funzione, definita in una classe di servizio:
codice:
public void addContact(String toJSON) throws Exception
{
try
{
// open connection
URL url = new URL("http://localhost:8081/Contact/saveContact");
HttpURLConnection con = (HttpURLConnection)url.openConnection();
// set connection parameters and connect
con.setDoOutput(true);
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.connect();
// write data
DataOutputStream output = new DataOutputStream(con.getOutputStream());
output.writeBytes(toJSON);
//output.flush();
output.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
Non ottengo nessun errore, ma alla fine non succede nulla, nel senso che nessuna nuova tupla viene aggiunta alla tabella dei contatti. La stringa creata dalla servlet, poi passata alla classe di servizio, risulta corretto, tant'è che, copiata in Postman e usata come corpo di una richiesta POST, provoca una corretta aggiunta nel DB.
Secondo voi dov'è l'errore?
Grazie.