使用Java将POST转换为Json
我有一个简单的帖子请求使用Java将POST转换为Json,java,json,spark-java,Java,Json,Spark Java,我有一个简单的帖子请求 POST /savings HTTP/1.1 Host: localhost:4567 Cache-Control: no-cache Content-Type: application/x-www-form-urlencoded Body: name=username&description=userdescription 我想知道如何将post bodyname=username&description=userdescription转换成类似Json的格
POST /savings HTTP/1.1
Host: localhost:4567
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded
Body:
name=username&description=userdescription
我想知道如何将post bodyname=username&description=userdescription
转换成类似Json的格式:
{
"name": "username",
"description": "userdescription"
}
任何想法,我正在使用,我需要用内容类型处理post请求:application/x-www-form-urlencoded
post("/user", (request, response) -> {
// .. Convert request to User object
});
我假设您从servlet中的URL获取参数,不是吗 无论如何,作为对正则表达式的练习,我会这样做:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
public class Any {
public static String queryStringToJasonParser(final String queryString){
try {
Pattern regex = Pattern.compile("(^|\\s+)name=(.*?)&description=(.*?)(\\s+|$)");
Matcher regexMatcher = regex.matcher(queryString);
if(regexMatcher.matches()){
final String nameValue = regexMatcher.group(2);
final String descriptionValue = regexMatcher.group(3);
return "{\"name\": \""+nameValue+"\", \"description\": \""+descriptionValue+"\"}";
}
} catch (PatternSyntaxException ex) {
//TODO: Handle it.
}
return "{\"name\": \"\", \"description\": \"\"}";
}
public static void main(String[] args){
final String resultJason = Any.queryStringToJasonParser("name=wow1&description=wow2");
System.out.println(resultJason);
final String resultJason1 = Any.queryStringToJasonParser("name=&description=wow2");
System.out.println(resultJason1);
}
}
添加任何需要的优化
关于您可以使用方法从POST请求中获取参数值
我假设您使用的是servlet,因此可以在doPost()
方法中执行以下操作:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
String description = request.getParameter("description");
JSONObject json = new JSONObject();
json.put("name", (name==null || name.isEmpty() ? "" : name));
json.put("description", (description==null || description.isEmpty())? "" : description);
}
您将获得所需的json:
{
"name": "username",
"description": "userdescription"
}
所有学分都归我个人使用谷歌Gson和请求对象来完成这项工作 值得注意的是,如果您使用URL参数,这将不起作用 编辑:如果缺少任何参数,UserRequest对象将为null,因为gson将无法构建该对象
import java.io.InputStreamReader;
import com.google.gson.Gson;
import spark.Spark;
public class Handler
{
private final Gson gson = new Gson();
public Handler()
{
}
public void init()
{
Spark.post("/user", (req, resp) -> {
final UserRequest userRequest = gson.fromJson(new InputStreamReader(req.raw().getInputStream()), UserRequest.class);
//do something with user
return new Object();
});
}
private static class UserRequest
{
private String name;
private String description;
public String getDescription()
{
return description;
}
public String getName()
{
return name;
}
}
public static void main(final String[] args)
{
final Handler handler = new Handler();
handler.init();
}
}
这有助于我看不到任何js或jquery标记@weroyes,但也许这就是问题所在你在使用servlet吗?@heartwilltell:你能告诉我们:-)如果你想在响应体中发送json,或者你想在服务器端将请求参数转换为json格式?我不明白你为什么要使用正则表达式为什么我们每次都要使用正则表达式并不断改变我们的模式,如果我们有其他方法的话参数while
request.getParameter()
可以为我们完成这项工作。好吧,“我有一个简单的帖子”->并不意味着询问者使用的是Tomcat、Jetty等,可能是自己的自制服务器