POST-Request mit Chrome Rest Client wirft Fehler : HTTP Status 415 - Cannot consume content type

Domae

Mitglied
Hey ihr,
Ich habe einen kleinen REST-Service geschrieben und möchte ihn nun mit dem Advanced Rest Client von Chrome testen. Folgenden Javacode habe ich geschrieben:

Java:
package de.dpunkt.myaktion.resources;

import java.util.List;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import de.dpunkt.myaktion.model.Aktion;
import de.dpunkt.myaktion.services.AktionService;

@Path("/organisator/aktion")
public class AktionResource {
	
	@Inject
	private AktionService aktionService;
	
	@GET
	@Path("/list")
	@Produces(MediaType.APPLICATION_JSON)
	public List<Aktion> getAllAktionen(){
		List<Aktion> allAktionen=aktionService.getAllAktionen();
		for(Aktion aktion: allAktionen){
			aktion.setSpenden(null);
			aktion.setOrganisator(null);
		}
		return allAktionen;
	}
	
	@DELETE
	@Path("/{aktionId}")
	public void deleteAktion(@PathParam(value="aktionId") Long aktionId){
		aktionService.deleteAktion(aktionId);
	}
	
	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	public Aktion addAktion(Aktion aktion){
		return aktionService.addAktion(aktion);
	}
}

Nun möchte ich die POST-Methode des Service testen. Dabei nutze ich den Rest Client wie folgt:

REST-Client1.jpg

Wenn ich den Request nun ausführe bekomme ich den folgenden Fehler:
REST-Client2.jpg

Und in der Console in Eclipse erscheint dieser Java-Fehler:
Java:
16:40:07,555 SCHWERWIEGEND [org.jboss.resteasy.core.SynchronousDispatcher] (http--0.0.0.0-8443-1) Failed executing POST organisator/aktion: org.jboss.resteasy.spi.UnsupportedMediaTypeException: Cannot consume content type
	at org.jboss.resteasy.core.registry.Segment.match(Segment.java:117) [resteasy-jaxrs-2.3.2.Final.jar:]
	at org.jboss.resteasy.core.registry.SimpleSegment.matchSimple(SimpleSegment.java:33) [resteasy-jaxrs-2.3.2.Final.jar:]
	at org.jboss.resteasy.core.registry.RootSegment.matchChildren(RootSegment.java:327) [resteasy-jaxrs-2.3.2.Final.jar:]
	at org.jboss.resteasy.core.registry.SimpleSegment.matchSimple(SimpleSegment.java:44) [resteasy-jaxrs-2.3.2.Final.jar:]
	at org.jboss.resteasy.core.registry.RootSegment.matchChildren(RootSegment.java:327) [resteasy-jaxrs-2.3.2.Final.jar:]
	at org.jboss.resteasy.core.registry.RootSegment.matchRoot(RootSegment.java:374) [resteasy-jaxrs-2.3.2.Final.jar:]
	at org.jboss.resteasy.core.registry.RootSegment.matchRoot(RootSegment.java:367) [resteasy-jaxrs-2.3.2.Final.jar:]
	at org.jboss.resteasy.core.ResourceMethodRegistry.getResourceInvoker(ResourceMethodRegistry.java:307) [resteasy-jaxrs-2.3.2.Final.jar:]
	at org.jboss.resteasy.core.SynchronousDispatcher.getInvoker(SynchronousDispatcher.java:173) [resteasy-jaxrs-2.3.2.Final.jar:]
	at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:118) [resteasy-jaxrs-2.3.2.Final.jar:]
	at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208) [resteasy-jaxrs-2.3.2.Final.jar:]
	at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55) [resteasy-jaxrs-2.3.2.Final.jar:]
	at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50) [resteasy-jaxrs-2.3.2.Final.jar:]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
	at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:489) [jbossweb-7.0.13.Final.jar:]
	at org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
	at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
	at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_71]

Habt ihr ne Idee woran das liegen könnte? Ich meine der Fehler liegt irgendwie bei dem JSON-Array was ich übergebe, denn am Javacode kanns ja eigentlich nicht liegen. Ich habe bereits versucht eine textdatei mit dem Json-String zu erstellen und diese dem Request anzuhängen. Aber das liefert das gleiche Ergebnise. Wahrscheinlich seh ich den Wald vor lauter Bäumen nicht und ihr findet den Fehler ganz schnell, aber ich weis einfach nicht woran das liegt.

Hoffe ihr habt ne idee.

Liebe Grüße
Domae
 
Zuletzt bearbeitet:

Tucan

Bekanntes Mitglied
UnsupportedMediaTypeExcepton… Irgendwas stimmt mit dem Format odet dem JSON-Inhalt nicht. Überprüf z.B. deine Klamern der json- Datei.
 

Domae

Mitglied
Hey Tucan,
danke für deine Antwort. Aber was genau sollte ich denn an dem json-string ändern? Mein Service konsumiert diesen String und erstellt davon eine Instanz eines Aktion-Objekts. Die Klasse Aktion sieht dabei wie folgt aus.

Java:
package de.dpunkt.myaktion.model;

import java.util.List;

import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.CascadeType;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Column;
import javax.persistence.Transient;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

@NamedQueries({ @NamedQuery(name = Aktion.findAll, query = "SELECT a FROM Aktion a ORDER BY a.name"),
				@NamedQuery(name = Aktion.getBisherGespendet, query="SELECT SUM(s.betrag) FROM Spende s WHERE s.aktion= :aktion"),
				@NamedQuery(name = Aktion.findByOrganisator, query="SELECT a FROM Aktion a WHERE a.organisator = :organisator ORDER BY a.name")})

@Entity
public class Aktion {
	
	public static final String findByOrganisator="Aktion.findByOrganisator";
	public static final String findAll="Aktion.findAll";
	public static final String getBisherGespendet="Aktion.getBisherGespendet";
	
	@NotNull
	@Size(min=4, max=30, message="Der Name einer Aktion muss min. 4 und darf max. 30 Zeichen lang sein.")
	private String name;
	
	@NotNull(message="Bitte ein Spendenziel angeben")
	@DecimalMin(value="10.00", message="Das Spendenziel für die Aktion muss min. 10 Euro sein.")
	private Double spendenZiel;
	
	@NotNull(message="Bitte einen Spendenbetrag angeben")
	@DecimalMin(value="1.00", message="Bitte spenden Sie mindestens 1 Euro.")
	private Double spendenBetrag;
	
	@Transient
	private Double bisherGespendet;

	@AttributeOverrides({ @AttributeOverride(name = "name", column = @Column(name = "kontoName")) })
	@Embedded
	private Konto konto;

	@GeneratedValue
	@Id
	private Long aktionId;

	@OneToMany(mappedBy = "aktion", cascade=CascadeType.REMOVE)
	private List<Spende> spenden;

	@ManyToOne
	private Organisator organisator;
	
	public Organisator getOrganisator() {
		return organisator;
	}

	public void setOrganisator(Organisator organisator) {
		this.organisator = organisator;
	}

	public Aktion() {
		konto = new Konto();
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Double getSpendenZiel() {
		return spendenZiel;
	}

	public void setSpendenZiel(Double spendenZiel) {
		this.spendenZiel = spendenZiel;
	}

	public Double getSpendenBetrag() {
		return spendenBetrag;
	}

	public void setSpendenBetrag(Double spendenBetrag) {
		this.spendenBetrag = spendenBetrag;
	}

	public Double getBisherGespendet() {
		return bisherGespendet;
	}

	public void setBisherGespendet(Double bisherGespendet) {
		this.bisherGespendet = bisherGespendet;
	}

	public Konto getKonto() {
		return konto;
	}

	public void setKonto(Konto konto) {
		this.konto = konto;
	}

	public void setId(Long aktionId) {
		this.aktionId = aktionId;
	}

	public Long getId() {
		return aktionId;
	}

	public List<Spende> getSpenden() {
		return spenden;
	}

	public void setSpenden(List<Spende> spenden) {
		this.spenden = spenden;
	}

}

Eigentlich sollte mein JSON-Objekt doch passen oder?

Liebe Grüße
Domae
 

Domae

Mitglied
Hab die Lösung gefunden und dabei fass ich mir selbst an den Kopf... Hab am Anfang anstatt eines ":" ein "=" als Trennung des Schlüssel/Wert-Paars genommen.. und ich such da ne Stunde rum.. oh man ;(

Danke nochmals Tucan für den Hinweis!

Liebe Grüße
Domae
 

Ähnliche Java Themen

Neue Themen


Oben