在java中从POST请求读取JSON对象
我有一个post请求,希望在我的数据库中插入一部电影 当前,当我在查询参数中输入创建新胶片对象所需的每一部分信息时,请求就起作用了(当使用postman进行测试时)在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
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如果您喜欢我的解决方案,您能将其标记为绿色记号吗?