java - Spring boot 应用程序无法在 PUT API 调用中映射 List 对象

标签 java spring spring-boot spring-mvc

我在 PUT/PATCH API 调用中使用对象列表,该调用对对象列表进行更新。下面是示例 POJO 和包装器对象。令我惊讶的是,请求映射失败。

POJO:

public class Product{


}


public class Products{

    private List<Product> products;

    public List<Product> getProducts() {
        return products;
    }

    public void setSubscription(List<Product> products) {
        this.products= products;
    }
}

Controller 类:

@Controller
@RequestMapping("app")
public class ProductController {

@Autowired
private ProductService productService ;





  @RequestMapping(value = "/products", method = RequestMethod.PUT, produces = "application/json;charset=UTF-8")
        public @ResponseStatus(value = HttpStatus.NO_CONTENT) @ResponseBody void updateProducts(
                @RequestBody Products products)
            throws IllegalArgumentException, MalformedURLException {

            productService .updateProducts(products);   

       } 


     @RequestMapping(value = "/products", method = RequestMethod.PATCH, produces = "application/json;charset=UTF-8")
        public @ResponseStatus(value = HttpStatus.NO_CONTENT) @ResponseBody void updateProducts(
                @RequestBody Products products)
            throws IllegalArgumentException, MalformedURLException {

            productService .updateProducts(products);   

       } 

JSON 请求:

{

      "name": "MySmartPhone",
      "brand":"Samsung"

}   

通过 postman h 进行本地测试的 URIttp://localhost:8080/app/products

最佳答案

您的 Controller 有Products,它是Product列表。您需要在 JSON 中传递相同的模式。

假设您的产品有以下字段

public class Product{
    public String name;
    public String brand;
}

您的请求 JSON 应该是这样的

{
    "products" : [
        {
            "name": "MySmartPhone",
            "brand":"Samsung"
        }       
    ]
}

编辑1:

我在 POSTMAN 中尝试了你的代码,我能够看到映射。检查在正文中的 Postman 中您是否选择了 application/json

@RequestMapping(value = "/products", method = RequestMethod.PUT, produces = "application/json;charset=UTF-8")
public @ResponseStatus(value = HttpStatus.NO_CONTENT) @ResponseBody void updateProducts(
            @RequestBody Products products) {
        System.out.println(products.getProducts().get(0).getName());
   } 

OUTPUT:
MySmartPhone

关于java - Spring boot 应用程序无法在 PUT API 调用中映射 List 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59350837/

相关文章:

spring - 在服务中使用多个服务或多个存储库?

Java动态列出分配的对象

java - 如何在 Frege 中声明带有类型变量的 native 接口(interface)?

java - 在运行时覆盖 `spring.cloud.config.profile`

java - Java Spring 中受控的 ThreadPoolExecutor

tomcat - 带有 Actuator .war 的 Spring Boot 部署在 tomcat 上

java - json 中的 Json 在 Spring Boot 中不起作用

java - 如何从 Spring Controller 在浏览器中返回 CSV 数据

java - Spring EntityManager 已关闭

java - Spring表单标签错误(绑定(bind)结果)