Statuscode 500 beim speichern von Fahrzeuge

ich möchte Fahrzeuge speichern und wenn ich versuche bekomme ich statuscode 500. das Projekt läuft auf wildfly
aber Registrierung von users funktioniert reibungslos


public class RestClientFactory {

	private DefaultHttpClient httpClient;
	private HttpResponse response = null;

	public int saveVehicle(String brand, String registrationNumber,
			String numberSeats, String numberDoors, String consumption,
			String price, String rentprice) {

		httpClient = new DefaultHttpClient();

		int statusCode = 0;

		HttpPost postRequest = new HttpPost(
				"http://localhost:8080/VehicleBooking/rest/vehicle");
		JSONObject json = new JSONObject();
		json.put("brand", brand);
		json.put("registrationNumber", registrationNumber);
		json.put("numberSeats", numberSeats);
		json.put("numberDoors", numberDoors);
		json.put("consumption", consumption);
		json.put("price", price);
		json.put("rentprice", rentprice);

		try {
			StringEntity input = new StringEntity(json.toString());
			input.setContentType("application/json");
			postRequest.setEntity(input);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}

		try {
			response = httpClient.execute(postRequest);
			statusCode = response.getStatusLine().getStatusCode();
			httpClient.getConnectionManager().shutdown();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return statusCode;
	}
}

public class VehicleController {

	private String brand;
	private String registrationNumber;
	private String numberSeats;
	private String numberDoors;
	private String consumption;
	private String price;
	private String rentprice;

	private RestClientFactory restClient = new RestClientFactory();

	public VehicleController() {
		// TODO Auto-generated constructor stub
	}

	public void save() {

		int statusCode = restClient.saveVehicle(brand, registrationNumber,
				numberSeats, numberDoors, consumption, price, rentprice);
		String output = "";

		switch (statusCode) {
		case 200:
			output = "Successful saved";
			break;
		case 400:
			output = "Error";
			break;
		case 500:
			output = " Internal Server Error";
			break;
		}

		System.out.println(output);
	}
}

Wie kann ich das Problem beseitigen?

danke euch im Voraus

was ist denn ‘localhost:8080/VehicleBooking’ ?
ein eigenes Java-Programm von dem du noch nichts gepostet hast?
kommt es da zur Request-Verarbeitung so dass man dort den Fehler suchen könnte oder schließt du das aus?
oder so geheim dass der Fehler ohne dies zu finden sein soll?

gibt es Doku zur Bedienung?
die Parameternamen wie “registrationNumber” fügst du ja als Freitext ein, was ist wenn falsch getippt?

response.getStatusLine() hat neben getStatusCode() auch eine Methode getReasonPhrase(), die Rückgabe schon einmal angeschaut?

Hallo guter Mensch,
du hast recht gehabt von eine meine Klassen kommt der Fehler
ich habe vorher vehicleDao.getVehicleByVehicleNumber gehabt (welche bei mir ID ist) und ich habe auf vehicleDao.getVehicleByVehicleBrand geändert(ich weiß dass es keine gescheite Entscheidung ist aber ich möchte schauen dass ich Fahrzeuge speichern kann )

	private VehicleDAO vehicleDao;

	@RequestMapping(method = RequestMethod.POST, consumes = "application/json")
	public ResponseEntity<String> saveVehicle(@RequestBody Vehicle vehicle) {
		if (vehicleDao.getVehicleByVehicleBrand(vehicle.getBrand()) != null) {
			vehicleDao.insertVehicle(vehicle);

			return new ResponseEntity<String>("Vehicle saved", HttpStatus.OK);
		} else {

			return new ResponseEntity<String>("Vehicle not Exists",
					HttpStatus.INTERNAL_SERVER_ERROR);
		}

	}```


```public class Vehicle {
	@Id
	@Column(name = "VEHICLE_NUMBER")
	private String vehicleNumber;
	@Column(name = "BRAND")
	private String brand;
	@Column(name = "REGISTRATION_NUMBER")
	private String registrationNumber;
	@Column(name = "NUBER_SEATS")
	private int numberSeats;
	@Column(name = "NUMBER_DOORS")
	private int numberDoors;
	@Column(name = "CONSUMPTION")
	private double consumption;
	@Column(name = "PRICE")
	private double price;
	@Column(name = "RENT_PRICE")
	private double rentprice;
	/*
	 * 
	 * 
	 * @Column(name = "GEAR") private Gear gear;
	 */
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "vehicle")
	private List<Booking> booking;
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "OWNER_USERNAME", nullable = false)
	private Owner owner;```

```public interface VehicleDAO {


	public Vehicle getVehicleByVehicleBrand(String brand);

}

@Repository
@Transactional
public class VehicleDAOImpl implements VehicleDAO {

	@Autowired
	SessionFactory sessionFactory;

	@Override
	public Vehicle getVehicleByVehicleBrand(String brand) {

		return (Vehicle) sessionFactory.getCurrentSession().get(Vehicle.class,
				brand);
	}

}


äh, das Thema ist nun gelöst? ich setze den Status Gelöst,


falls du wirklich selber den Server hast, mit Code der explizit die 500 wirft,
dann ja starkes Stück das weder selber zu untersuchen noch (zuvor) hier zu posten :wink:

du solltest vielleicht ein gewisses Log im Server einführen, damit du dort kontrollieren kannst
„Anfrage … mit Status 500 abgewiesen, Grund: …“

[quote=SlaterB]äh, das Thema ist nun gelöst? ich setze den Status Gelöst,[/quote]Es ist nicht gelöst. habe trotzdem Gleichen Fehler ;(

*** Edit ***

[quote=SlaterB;119936]falls du wirklich selber den Server hast, mit Code der explizit die 500 wirft,
dann ja starkes Stück das weder selber zu untersuchen noch (zuvor) hier zu posten

du solltest vielleicht ein gewisses Log im Server einführen, damit du dort kontrollieren kannst
“Anfrage … mit Status 500 abgewiesen, Grund: …”[/quote]und was meinst du genau damit?

oje, bevor ich meine Sätze erklären soll, lieber: ignoriere, dass sie je geschrieben wurden

was ist nochmal deine Frage? der Fehler 500 kommt doch anscheinend vom else-Fall in saveVehicle()?
damit wäre alles zur Übertragung geklärt,
was die Methode machen soll vielleicht noch nicht

immer gefährlich sich mit solch technischen Dingen zu beschäftigen und die fachliche Fragen aus den Augen zu verlieren,
stelle alles zu HTMLClient und JSON, @Autowired, @RequestMapping und all das andere Geblubber zur Seite,
(wobei auf @Autowired für SessionFactory vielleicht nicht zu verzichten…)


programmiere stattdessen ein normaleres Programm mit main-Methode,
welches ein Vehicle-Objekt ganz normal erzeugt (Java-Objekte kann man mit new erzeugen, jaja, Späße sind zu ertragen :wink: )
und das an saveVehicle() übergibt,

was soll da passieren?
dass ein getVehicleByVehicleBrand() schon existieren soll klingt nach einer merkwürdigen Bedingung,
man müsste doch auch ein Vehicle bei komplett leerer DB speichern können oder wie entsteht das erste?

eine typische Bedingung ist lediglich die Abfrage, ob Ids wie vielleicht registrationNumber schon vergeben sind, 2x nicht erlaubt

[quote=SlaterB]was soll da passieren?
dass ein getVehicleByVehicleBrand() schon existieren soll klingt nach einer merkwürdigen Bedingung,
man müsste doch auch ein Vehicle bei komplett leerer DB speichern können oder wie entsteht das erste?

eine typische Bedingung ist lediglich die Abfrage, ob Ids wie vielleicht registrationNumber schon vergeben sind, 2x nicht erlaubt[/quote]
hast vollkommen recht ich wollte nur schauen ob speichern funktioniert !

if (vehicleDao.getVehicleByVehicleBrand(vehicle.getBrand()) != null) {  // NUR EINFÜGEN, WENN BEREITS EIN VEHIKEL MIT DEM GLEICHEN BRAND EXISTIERT??
            vehicleDao.insertVehicle(vehicle);
 
            return new ResponseEntity<String>("Vehicle saved", HttpStatus.OK);
        } else {
 
            return new ResponseEntity<String>("Vehicle not Exists",
                    HttpStatus.INTERNAL_SERVER_ERROR);
        }

komisch, wenn ein Ding noch nicht existiert sollte es doch eingefügt werden? Bist du sicher, dass deine Logik da stimmt?

und getByBrand - liefert das wirklich nur EIN Ergebnis?

nur mal so als dumme Frage, aber gibt es den schon ein Fahrzeug (mit dem Brand) in deiner DB? Weil wenn nicht kann es ja nicht klappen.