Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpMediaTypeNotAcceptableException将POJO作为JSON返回时发生异常_Java_Json_Spring - Fatal编程技术网

Java HttpMediaTypeNotAcceptableException将POJO作为JSON返回时发生异常

Java HttpMediaTypeNotAcceptableException将POJO作为JSON返回时发生异常,java,json,spring,Java,Json,Spring,我遇到了这个问题:当试图将Cart对象作为JSON返回时,HttpMediaTypeNotAcceptableException。奇怪的是,json映射正在工作,正如我在这里看到的: 显然,它对Cart不起作用,我将所有getter都放在Cart类中,但仍然存在相同的问题。 以下是我的控制器方法: @RequestMapping(value="/{cartId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSO

我遇到了这个问题:当试图将Cart对象作为JSON返回时,HttpMediaTypeNotAcceptableException。奇怪的是,json映射正在工作,正如我在这里看到的:

显然,它对Cart不起作用,我将所有getter都放在Cart类中,但仍然存在相同的问题。 以下是我的控制器方法:

@RequestMapping(value="/{cartId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody Cart read(@PathVariable String cartId) {
    return cartService.read(cartId);
}
以下是我放在pom.xml中的依赖项:

<dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.8.5</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.8.5</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.8.5</version>
    </dependency>
}

是什么导致了问题

更新:
我读到内容协商视图解析器与@ResponseBody无关。是内容协商视图解析器对Product.java POJO有效,是@ResponseBody对Cart.java无效。我不知道他们之间没有任何关系。也许现在有人会知道该怎么做,以便@ResponseBody工作(返回JSON)。

我认为您应该尝试使用products=MediaType.APPLICATION\u JSON\u值指定返回类型。所以你的代码应该是

 @RequestMapping(value="/{cartId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
            public ResponseEntity<Cart> read(@PathVariable String cartId) {
                  Cart cart= cartService.read(cartId);
            return new ResponseEntity<>(cart, HttpStatus.OK);

            }
@RequestMapping(value=“/{cartId}”,method=RequestMethod.GET,products=MediaType.APPLICATION\u JSON\u value)
公共响应读取(@PathVariable字符串cartId){
Cart=cartService.read(cartId);
返回新的响应属性(购物车,HttpStatus.OK);
}
更新:
你的Cart POJO没有getter和setter, 因此,您需要:

getCartId 塞卡蒂 getCartitems 设置购物车项目 getGrandTotal 塞特格兰道尔

你可以争论Cart是否真的是POJO。在我看来,您必须在对象中加入许多业务逻辑。我的建议是创建一个CartServices或类似的东西,它管理所有这些逻辑。在这种情况下,你可以保持车清洁,作为一个真正的POJO。所以只有属性及其getter和setter

我相信这些getter和setter对于序列化是必要的

你有没有试过:

@RequestMapping(value="/{cartId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody Cart read(@PathVariable String cartId) {
    return cartService.read(cartId);
}
更新
我找到了解决办法。我要做的是删除ContentNegotingViewResolver和所有与之相关的内容。完成后,一切都开始工作。

您在@products中给出的类型是什么?我认为您需要在pom.xml->org.json json 20090211中包含json依赖项@products注释是什么?我应该把它放在哪里?我想知道有效的产品POJO之间有什么区别。我把有效的POJO放在一起,并更新了POST。例如,一个布尔字段,isEnabled()而不是getEnabled()。我在我的类上面使用了lombok的@Getter注释,所以我认为一切都完成了correctly@J.Sztukiecki你能通过向我们展示你现在拥有的东西来更新你的问题吗?你的购物车POJO没有getter和setter,所以你需要:getCartId setCartId getCartitems setCartitems getGrandTotal setGrandTotal我在我的类上面有这样的注释:当我把“products”放在那里时,我明白了:这个请求标识的资源只能根据请求“accept”生成具有不可接受特征的响应headers.you设置了类似accep headers的东西吗?我希望您没有将控制器上的hedears设置为整个classI的@RequestMapping参数。我只把它放在Postman:Content Type:application/json的header中
@Data
@EqualsAndHashCode
@ToString
@XmlRootElement(name="product")
@Getter
@Setter
public class Product {
@Pattern(regexp = "P[0-9]+", message = "Błędny indentyfikator produktu")
@ProductId
private String id;
@Size(min=4, max=50, message="Błędna nazwa produktu. Powinna mieć od {min} do {max} znaków")
private String name;
@Min(value=0, message="Błędna cena produktu. Cena nie może być ujemna.")
@Digits(integer = 8, fraction = 2, message="Błędna cena produktu. Cena powinna składać się z 8 " +
        "liczb reprezentujących część całkowitą i 2 cyfr reprezentujących część ułamkową")
@NotNull(message = "Błędna cena produktu. Cena nie może być pusta.")
private BigDecimal unitPrice;
private String description;
private String manufacturer;
@NotNull(message = "Kategoria nie może być pusta")
@Category
private String category;
@Min(value=0, message="Liczba przedmiotów musi być większa lub równa 0.")
private long unitsInStock;
private long unitsInOrder;
private boolean discontinued;
private String condition;
@JsonIgnore
private MultipartFile productImage;

public Product() {
}

public Product(String id, String name, BigDecimal unitPrice) {
    this.id = id;
    this.name = name;
    this.unitPrice = unitPrice;
}

@XmlElement()
public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getName() {
    return name;
}

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

public BigDecimal getUnitPrice() {
    return unitPrice;
}

public void setUnitPrice(BigDecimal unitPrice) {
    this.unitPrice = unitPrice;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getManufacturer() {
    return manufacturer;
}

public void setManufacturer(String manufacturer) {
    this.manufacturer = manufacturer;
}

public String getCategory() {
    return category;
}

public void setCategory(String category) {
    this.category = category;
}

public long getUnitsInStock() {
    return unitsInStock;
}

public void setUnitsInStock(long unitsInStock) {
    this.unitsInStock = unitsInStock;
}

public long getUnitsInOrder() {
    return unitsInOrder;
}

public void setUnitsInOrder(long unitsInOrder) {
    this.unitsInOrder = unitsInOrder;
}

public boolean isDiscontinued() {
    return discontinued;
}

public void setDiscontinued(boolean discontinued) {
    this.discontinued = discontinued;
}

public String getCondition() {
    return condition;
}

public void setCondition(String condition) {
    this.condition = condition;
}


@XmlTransient
public MultipartFile getProductImage() {
    return productImage;
}

public void setProductImage(MultipartFile productImage) {
    this.productImage = productImage;
}
 @RequestMapping(value="/{cartId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
            public ResponseEntity<Cart> read(@PathVariable String cartId) {
                  Cart cart= cartService.read(cartId);
            return new ResponseEntity<>(cart, HttpStatus.OK);

            }
@RequestMapping(value="/{cartId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody Cart read(@PathVariable String cartId) {
    return cartService.read(cartId);
}