Java 如何解决415不支持的媒体类型错误?
我有angular 5,它试图在java应用程序中向rest服务发送PUT请求: 角度调用:Java 如何解决415不支持的媒体类型错误?,java,json,angular,rest,jax-rs,Java,Json,Angular,Rest,Jax Rs,我有angular 5,它试图在java应用程序中向rest服务发送PUT请求: 角度调用: ... import 'rxjs/add/operator/toPromise'; const httpOptions = { headers: new HttpHeaders({ 'Accept': 'application/json', 'Content-Type': 'application/json' }) }; @Injectable
...
import 'rxjs/add/operator/toPromise';
const httpOptions = {
headers: new HttpHeaders({ 'Accept': 'application/json', 'Content-Type': 'application/json' })
};
@Injectable()
export class TripService {
...
saveTrip(trip: Trip): Observable<any> {
return this.http.put(`${this.baseUrl}/Trip`, JSON.stringify(trip), httpOptions);
}
@PUT
@Consumes("application/json")
public Response updateTrip(Trip trip) {
tripDao.updateTrip(trip);
return Response.ok().entity("trip updated successfully").build();
}
@Entity
@Table(name = "trip")
@XmlRootElement
public class Trip implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@XmlElement(name = "id")
private Integer id;
@XmlElement(name = "user")
private User user;
@XmlElement(name = "start_date")
private Date startDate;
...
Accept: application/json
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,he;q=0.8
Authorization: Bearer fake-jwt-token
Connection: keep-alive
Content-Length: 538
Content-Type: application/json
Host: localhost:8080
Origin: http://localhost:4200
Referer: http://localhost:4200/manager/company
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
Request URL: http://localhost:8080/... /rest/Trip
Request Method: PUT
Status Code: 415 Unsupported Media Type
Remote Address: [::1]:8080
Referrer Policy: no-referrer-when-downgrade
实体!:强>
...
import 'rxjs/add/operator/toPromise';
const httpOptions = {
headers: new HttpHeaders({ 'Accept': 'application/json', 'Content-Type': 'application/json' })
};
@Injectable()
export class TripService {
...
saveTrip(trip: Trip): Observable<any> {
return this.http.put(`${this.baseUrl}/Trip`, JSON.stringify(trip), httpOptions);
}
@PUT
@Consumes("application/json")
public Response updateTrip(Trip trip) {
tripDao.updateTrip(trip);
return Response.ok().entity("trip updated successfully").build();
}
@Entity
@Table(name = "trip")
@XmlRootElement
public class Trip implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@XmlElement(name = "id")
private Integer id;
@XmlElement(name = "user")
private User user;
@XmlElement(name = "start_date")
private Date startDate;
...
Accept: application/json
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,he;q=0.8
Authorization: Bearer fake-jwt-token
Connection: keep-alive
Content-Length: 538
Content-Type: application/json
Host: localhost:8080
Origin: http://localhost:4200
Referer: http://localhost:4200/manager/company
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
Request URL: http://localhost:8080/... /rest/Trip
Request Method: PUT
Status Code: 415 Unsupported Media Type
Remote Address: [::1]:8080
Referrer Policy: no-referrer-when-downgrade
请求头:
...
import 'rxjs/add/operator/toPromise';
const httpOptions = {
headers: new HttpHeaders({ 'Accept': 'application/json', 'Content-Type': 'application/json' })
};
@Injectable()
export class TripService {
...
saveTrip(trip: Trip): Observable<any> {
return this.http.put(`${this.baseUrl}/Trip`, JSON.stringify(trip), httpOptions);
}
@PUT
@Consumes("application/json")
public Response updateTrip(Trip trip) {
tripDao.updateTrip(trip);
return Response.ok().entity("trip updated successfully").build();
}
@Entity
@Table(name = "trip")
@XmlRootElement
public class Trip implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@XmlElement(name = "id")
private Integer id;
@XmlElement(name = "user")
private User user;
@XmlElement(name = "start_date")
private Date startDate;
...
Accept: application/json
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,he;q=0.8
Authorization: Bearer fake-jwt-token
Connection: keep-alive
Content-Length: 538
Content-Type: application/json
Host: localhost:8080
Origin: http://localhost:4200
Referer: http://localhost:4200/manager/company
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
Request URL: http://localhost:8080/... /rest/Trip
Request Method: PUT
Status Code: 415 Unsupported Media Type
Remote Address: [::1]:8080
Referrer Policy: no-referrer-when-downgrade
错误:
...
import 'rxjs/add/operator/toPromise';
const httpOptions = {
headers: new HttpHeaders({ 'Accept': 'application/json', 'Content-Type': 'application/json' })
};
@Injectable()
export class TripService {
...
saveTrip(trip: Trip): Observable<any> {
return this.http.put(`${this.baseUrl}/Trip`, JSON.stringify(trip), httpOptions);
}
@PUT
@Consumes("application/json")
public Response updateTrip(Trip trip) {
tripDao.updateTrip(trip);
return Response.ok().entity("trip updated successfully").build();
}
@Entity
@Table(name = "trip")
@XmlRootElement
public class Trip implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@XmlElement(name = "id")
private Integer id;
@XmlElement(name = "user")
private User user;
@XmlElement(name = "start_date")
private Date startDate;
...
Accept: application/json
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,he;q=0.8
Authorization: Bearer fake-jwt-token
Connection: keep-alive
Content-Length: 538
Content-Type: application/json
Host: localhost:8080
Origin: http://localhost:4200
Referer: http://localhost:4200/manager/company
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
Request URL: http://localhost:8080/... /rest/Trip
Request Method: PUT
Status Code: 415 Unsupported Media Type
Remote Address: [::1]:8080
Referrer Policy: no-referrer-when-downgrade
我需要JSON到Java转换的帮助吗?例如,我有一个罐子:
javax.ws.rs-api-2.0.1
我添加了项目中目前包含的jackson罐子:
您的客户端正在其
接受头中请求应用程序/json
,但服务器没有生成它。添加生成声明支持内容类型的注释
@PUT
@Consumes("application/json")
@Produces("application/json")
public Response updateTrip(Trip trip) {
除此之外,您的服务器没有使用JSON响应,这是一个完全不同的问题。您可能希望使用以下内容对该方法进行注释:
@Consumes("text/plain")
您最可能需要的修复方法是让您的客户发送Accept://*
,或Accept:text/plain
使用Jackson
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
com.fasterxml.jackson.core
杰克逊数据绑定
2.9.5
除非您有任何特殊情况,否则它可以将您的XML响应转换为JSON,而无需任何其他代码。考虑到这些代码,似乎不太可能。可能是用于@的包使用了错误的
?您期望的是XML响应(根据响应类上的XML注释进行猜测)还是JSON响应?我期望的是JSON响应,并且在使用GET方法生成JSON时,注释工作正常。我唯一的问题是JSON到JAVA的转换。知道吗?你在哪里传递头?你应该看看java日志。您还可以删除JSON.stringify()并检查。是什么让您认为OP想要将XML转换为JSON?顺便说一下,这种依赖关系不足以将XML转换为JSON。。。