Java 如何解决415不支持的媒体类型错误?

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

我有angular 5,它试图在java应用程序中向rest服务发送PUT请求:

角度调用:

    ...
    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。。。