在java中从POST请求读取JSON对象

在java中从POST请求读取JSON对象,java,json,xml,rest,post,Java,Json,Xml,Rest,Post,我有一个post请求,希望在我的数据库中插入一部电影 当前,当我在查询参数中输入创建新胶片对象所需的每一部分信息时,请求就起作用了(当使用postman进行测试时) title:TEST year:2021 director:TEST stars:TEST review:TEST 我的Post方法 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletExcep

我有一个post请求,希望在我的数据库中插入一部电影

当前,当我在查询参数中输入创建新胶片对象所需的每一部分信息时,请求就起作用了(当使用postman进行测试时)

title:TEST
year:2021
director:TEST
stars:TEST
review:TEST
我的Post方法

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
    FilmDAO dao = new FilmDAO();        
    PrintWriter pw = response.getWriter();
    
    String title = request.getParameter("title");
    int year = Integer.valueOf(request.getParameter("year"));
    String director = request.getParameter("director");
    String stars = request.getParameter("stars");
    String review = request.getParameter("review");
    
    Film f = new Film(title, year, director, stars, review);
    
    dao.insertFilm(f);
}
如果电影作为JSON或XML对象传入,我需要我的post方法也能工作,但我不确定如何做到这一点

我试过了

 StringBuilder sb = new StringBuilder();
    BufferedReader reader = request.getReader();
    try {
        String line;
        while ((line = reader.readLine()) != null) {
            sb.append(line).append('\n');
        }
    } finally {
        reader.close();
    }
    System.out.println(sb.toString());
获取json对象并显示:[{“title”:“TEST”,“year”:2021,“director”:“TEST”,“stars”:“tests”,“review”:“TEST”}]


但是我不知道如何使用这个字符串调用我的插入方法,你可以很容易地用Spring Boot Framework解决你的问题

在SpringBoot中,您只需将“消费”和“生产”键添加到注释中

@PostMapping(
        consumes = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE }, 
        produces = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE }
)
public MyResponse doPost(@RequestBody Film film) 
{
  MyResponse response = new MyResponse();
  response.setData(film);
  return response;
}
对于您的解决方案,您需要使用以下依赖项(Maven package manager)将xml或json字符串转换为Film对象。然后可以使用Film对象保存在数据库中

对于Json:

<dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-databind</artifactId>
     <version>2.12.1</version>
</dependency>
<dependency>
     <groupId>com.fasterxml.jackson.dataformat</groupId>
     <artifactId>jackson-dataformat-xml</artifactId>
     <version>2.11.1</version>
</dependency>
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

import java.util.List;

public class RestAssuredDemo {

    public static void main(String[] args) {
        String filmJson = """
                  {
                    "title": "TEST",
                    "year": 2021,
                    "director": "TEST",
                    "stars": "tests",
                    "review": "test"
                  }
                
                """;

        String filmXml = """
                  <film>
                    <title>TEST</title>
                    <year>2021</year>
                    <director>TEST</director>
                    <stars>tests</stars>
                    <review>test</review>
                  </film>
                """;

        XmlMapper xmlMapper = new XmlMapper();
        Film xmlFilm = null;
        try {
            xmlFilm = xmlMapper.readValue(filmXml, Film.class);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        ObjectMapper om = new ObjectMapper();
        Film film = null;
        try {
            film = om.readValue(filmJson, new TypeReference<>() {});
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }

    public static class Film{
        public String title;
        public int year;
        public String director;
        public String stars;
        public String review;
    }

com.fasterxml.jackson.core
杰克逊数据绑定
2.12.1
对于XML:

<dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-databind</artifactId>
     <version>2.12.1</version>
</dependency>
<dependency>
     <groupId>com.fasterxml.jackson.dataformat</groupId>
     <artifactId>jackson-dataformat-xml</artifactId>
     <version>2.11.1</version>
</dependency>
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

import java.util.List;

public class RestAssuredDemo {

    public static void main(String[] args) {
        String filmJson = """
                  {
                    "title": "TEST",
                    "year": 2021,
                    "director": "TEST",
                    "stars": "tests",
                    "review": "test"
                  }
                
                """;

        String filmXml = """
                  <film>
                    <title>TEST</title>
                    <year>2021</year>
                    <director>TEST</director>
                    <stars>tests</stars>
                    <review>test</review>
                  </film>
                """;

        XmlMapper xmlMapper = new XmlMapper();
        Film xmlFilm = null;
        try {
            xmlFilm = xmlMapper.readValue(filmXml, Film.class);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        ObjectMapper om = new ObjectMapper();
        Film film = null;
        try {
            film = om.readValue(filmJson, new TypeReference<>() {});
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }

    public static class Film{
        public String title;
        public int year;
        public String director;
        public String stars;
        public String review;
    }

com.fasterxml.jackson.dataformat
jackson数据格式xml
2.11.1
代码示例:

<dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-databind</artifactId>
     <version>2.12.1</version>
</dependency>
<dependency>
     <groupId>com.fasterxml.jackson.dataformat</groupId>
     <artifactId>jackson-dataformat-xml</artifactId>
     <version>2.11.1</version>
</dependency>
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

import java.util.List;

public class RestAssuredDemo {

    public static void main(String[] args) {
        String filmJson = """
                  {
                    "title": "TEST",
                    "year": 2021,
                    "director": "TEST",
                    "stars": "tests",
                    "review": "test"
                  }
                
                """;

        String filmXml = """
                  <film>
                    <title>TEST</title>
                    <year>2021</year>
                    <director>TEST</director>
                    <stars>tests</stars>
                    <review>test</review>
                  </film>
                """;

        XmlMapper xmlMapper = new XmlMapper();
        Film xmlFilm = null;
        try {
            xmlFilm = xmlMapper.readValue(filmXml, Film.class);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        ObjectMapper om = new ObjectMapper();
        Film film = null;
        try {
            film = om.readValue(filmJson, new TypeReference<>() {});
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }

    public static class Film{
        public String title;
        public int year;
        public String director;
        public String stars;
        public String review;
    }
import com.fasterxml.jackson.core.JsonProcessingException;
导入com.fasterxml.jackson.core.type.TypeReference;
导入com.fasterxml.jackson.databind.ObjectMapper;
导入com.fasterxml.jackson.dataformat.xml.XmlMapper;
导入java.util.List;
公共类RestAssuredDemo{
公共静态void main(字符串[]args){
字符串:json=“”
{
“标题”:“测试”,
“年份”:2021年,
“主管”:“测试”,
“明星”:“测试”,
“审查”:“测试”
}
""";
字符串filmXml=“”
试验
2021
试验
测验
测试
""";
XmlMapper XmlMapper=新的XmlMapper();
Film xmlFilm=null;
试一试{
xmlFilm=xmlMapper.readValue(filmXml,Film.class);
}捕获(JsonProcessingException e){
e、 printStackTrace();
}
ObjectMapper om=新的ObjectMapper();
Film=null;
试一试{
film=om.readValue(filmJson,newtypereference(){});
}捕获(JsonProcessingException e){
e、 printStackTrace();
}
}
公共静态类影片{
公共字符串标题;
公共国际年;
公共字符串控制器;
公共弦乐明星;
公开审查;
}

使用Spring Boot Framework,您可以轻松解决问题

在SpringBoot中,您只需将“消费”和“生产”键添加到注释中

@PostMapping(
        consumes = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE }, 
        produces = { MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE }
)
public MyResponse doPost(@RequestBody Film film) 
{
  MyResponse response = new MyResponse();
  response.setData(film);
  return response;
}
对于您的解决方案,您需要使用以下依赖项(Maven package manager)将xml或json字符串转换为Film对象。然后您可以使用Film对象保存在数据库中

对于Json:

<dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-databind</artifactId>
     <version>2.12.1</version>
</dependency>
<dependency>
     <groupId>com.fasterxml.jackson.dataformat</groupId>
     <artifactId>jackson-dataformat-xml</artifactId>
     <version>2.11.1</version>
</dependency>
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

import java.util.List;

public class RestAssuredDemo {

    public static void main(String[] args) {
        String filmJson = """
                  {
                    "title": "TEST",
                    "year": 2021,
                    "director": "TEST",
                    "stars": "tests",
                    "review": "test"
                  }
                
                """;

        String filmXml = """
                  <film>
                    <title>TEST</title>
                    <year>2021</year>
                    <director>TEST</director>
                    <stars>tests</stars>
                    <review>test</review>
                  </film>
                """;

        XmlMapper xmlMapper = new XmlMapper();
        Film xmlFilm = null;
        try {
            xmlFilm = xmlMapper.readValue(filmXml, Film.class);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        ObjectMapper om = new ObjectMapper();
        Film film = null;
        try {
            film = om.readValue(filmJson, new TypeReference<>() {});
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }

    public static class Film{
        public String title;
        public int year;
        public String director;
        public String stars;
        public String review;
    }

com.fasterxml.jackson.core
杰克逊数据绑定
2.12.1
对于XML:

<dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-databind</artifactId>
     <version>2.12.1</version>
</dependency>
<dependency>
     <groupId>com.fasterxml.jackson.dataformat</groupId>
     <artifactId>jackson-dataformat-xml</artifactId>
     <version>2.11.1</version>
</dependency>
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

import java.util.List;

public class RestAssuredDemo {

    public static void main(String[] args) {
        String filmJson = """
                  {
                    "title": "TEST",
                    "year": 2021,
                    "director": "TEST",
                    "stars": "tests",
                    "review": "test"
                  }
                
                """;

        String filmXml = """
                  <film>
                    <title>TEST</title>
                    <year>2021</year>
                    <director>TEST</director>
                    <stars>tests</stars>
                    <review>test</review>
                  </film>
                """;

        XmlMapper xmlMapper = new XmlMapper();
        Film xmlFilm = null;
        try {
            xmlFilm = xmlMapper.readValue(filmXml, Film.class);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        ObjectMapper om = new ObjectMapper();
        Film film = null;
        try {
            film = om.readValue(filmJson, new TypeReference<>() {});
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }

    public static class Film{
        public String title;
        public int year;
        public String director;
        public String stars;
        public String review;
    }

com.fasterxml.jackson.dataformat
jackson数据格式xml
2.11.1
代码示例:

<dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-databind</artifactId>
     <version>2.12.1</version>
</dependency>
<dependency>
     <groupId>com.fasterxml.jackson.dataformat</groupId>
     <artifactId>jackson-dataformat-xml</artifactId>
     <version>2.11.1</version>
</dependency>
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

import java.util.List;

public class RestAssuredDemo {

    public static void main(String[] args) {
        String filmJson = """
                  {
                    "title": "TEST",
                    "year": 2021,
                    "director": "TEST",
                    "stars": "tests",
                    "review": "test"
                  }
                
                """;

        String filmXml = """
                  <film>
                    <title>TEST</title>
                    <year>2021</year>
                    <director>TEST</director>
                    <stars>tests</stars>
                    <review>test</review>
                  </film>
                """;

        XmlMapper xmlMapper = new XmlMapper();
        Film xmlFilm = null;
        try {
            xmlFilm = xmlMapper.readValue(filmXml, Film.class);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        ObjectMapper om = new ObjectMapper();
        Film film = null;
        try {
            film = om.readValue(filmJson, new TypeReference<>() {});
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }

    public static class Film{
        public String title;
        public int year;
        public String director;
        public String stars;
        public String review;
    }
import com.fasterxml.jackson.core.JsonProcessingException;
导入com.fasterxml.jackson.core.type.TypeReference;
导入com.fasterxml.jackson.databind.ObjectMapper;
导入com.fasterxml.jackson.dataformat.xml.XmlMapper;
导入java.util.List;
公共类RestAssuredDemo{
公共静态void main(字符串[]args){
字符串:json=“”
{
“标题”:“测试”,
“年份”:2021年,
“主管”:“测试”,
“明星”:“测试”,
“审查”:“测试”
}
""";
字符串filmXml=“”
试验
2021
试验
测验
测试
""";
XmlMapper XmlMapper=新的XmlMapper();
Film xmlFilm=null;
试一试{
xmlFilm=xmlMapper.readValue(filmXml,Film.class);
}捕获(JsonProcessingException e){
e、 printStackTrace();
}
ObjectMapper om=新的ObjectMapper();
Film=null;
试一试{
film=om.readValue(filmJson,newtypereference(){});
}捕获(JsonProcessingException e){
e、 printStackTrace();
}
}
公共静态类影片{
公共字符串标题;
公共国际年;
公共字符串控制器;
公共弦乐明星;
公开审查;
}

您使用的是哪个web框架还是这个简单的servlet?@silentsudo,我现在只使用一个简单的web servlet:)您使用的是哪个web框架还是这个简单的servlet?@silentsudo,我现在只使用一个简单的web servlet:)非常感谢您提供了一个很好的示例!!@Reeves62不客气。@Reeves62如果您愿意的话我的解决方案,您能将其标记为绿色记号吗?非常感谢您提供的好例子!!@Reeves62不客气。@Reeves62如果您喜欢我的解决方案,您能将其标记为绿色记号吗?