Ответ 1
Я делаю именно то, что вы предлагаете (верните String
).
Возможно, вы захотите установить тип MIME, чтобы указать, что вы возвращаете JSON, хотя (согласно fooobar.com/questions/4/... его "application/json" ).
Как вернуть объект JSON из сервлета Java.
Раньше при выполнении AJAX с сервлетом я возвращал строку. Существует ли тип объекта JSON, который нужно использовать, или вы просто возвращаете строку, которая выглядит как объект JSON, например.
String objectToReturn = "{ key1: 'value1', key2: 'value2' }";
Я делаю именно то, что вы предлагаете (верните String
).
Возможно, вы захотите установить тип MIME, чтобы указать, что вы возвращаете JSON, хотя (согласно fooobar.com/questions/4/... его "application/json" ).
Записать объект JSON в выходной поток объекта ответа.
Вы также должны установить тип содержимого следующим образом, чтобы указать, что вы возвращаете:
response.setContentType("application/json");
// Get the printwriter object from response to write the required json object to the output stream
PrintWriter out = response.getWriter();
// Assuming your json object is **jsonObject**, perform the following, it will return your json object
out.print(jsonObject);
out.flush();
Сначала преобразуйте объект JSON в String
. Затем просто напишите его автору ответа вместе с типом содержимого application/json
и кодировкой символов UTF-8.
Вот пример, предполагающий, что вы используете Google Gson для преобразования объекта Java в строку JSON:
protected void doXxx(HttpServletRequest request, HttpServletResponse response) {
// ...
String json = new Gson().toJson(someObject);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
}
Что все.
Как вы возвращаете объект JSON из сервлета Java
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
//create Json Object
JsonObject json = new JsonObject();
// put some value pairs into the JSON object .
json.addProperty("Mobile", 9999988888);
json.addProperty("Name", "ManojSarnaik");
// finally output the json string
out.print(json.toString());
Просто напишите строку в выходной поток. Вы можете установить MIME-тип на text/javascript
( изменить: application/json
, по-видимому, официально), если вы чувствуете себя полезной. (Там небольшой, но отличный шанс, что когда-нибудь он что-то испортит, и это хорошая практика.)
Для этого очень полезен Gson. проще даже. вот мой пример:
public class Bean {
private String nombre="juan";
private String apellido="machado";
private List<InnerBean> datosCriticos;
class InnerBean
{
private int edad=12;
}
public Bean() {
datosCriticos = new ArrayList<>();
datosCriticos.add(new InnerBean());
}
}
Bean bean = new Bean();
Gson gson = new Gson();
String json =gson.toJson(bean);
out.print(JSON);
{ "Nombre": "Жуана", "Apellido": "Мачадо", "datosCriticos": [{ "Edad": 12}]}
Обязательно скажите людям, если ваши вары пусты, когда вы используете gson, он не построит json для вас. Просто
{}
Я использовал Джексона для преобразования Java Object в строку JSON и отправки следующим образом.
PrintWriter out = response.getWriter();
ObjectMapper objectMapper= new ObjectMapper();
String jsonString = objectMapper.writeValueAsString(MyObject);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
out.print(jsonString);
out.flush();
Может существовать объект JSON для удобства кодирования Java. Но, наконец, структура данных будет сериализована для строки. Настройка правильного типа MIME будет приятной.
В зависимости от версии Java (или JDK, SDK, JRE... я не знаю, я новичок в экосистеме Java), JsonObject
является абстрактным. Итак, это новая реализация:
import javax.json.Json;
import javax.json.JsonObject;
...
try (PrintWriter out = response.getWriter()) {
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
JsonObject json = Json.createObjectBuilder().add("foo", "bar").build();
out.print(json.toString());
}
response.setContentType( "текст/JSON" );
//создаем строку JSON, я предлагаю использовать некоторую фреймворк.
Строка your_string;
out.write(your_string.getBytes( "UTF-8" ));
Близко к ответу BalusC в 4 простых строках с использованием Google Gson lib. Добавьте эти строки в метод сервлета:
User objToSerialize = new User("Bill", "Gates");
ServletOutputStream outputStream = response.getOutputStream();
response.setContentType("application/json;charset=UTF-8");
outputStream.print(new Gson().toJson(objToSerialize));
Удачи!
Используя Gson, вы можете отправить ответ JSON, см. Код ниже
Вы можете увидеть этот код
@WebServlet(urlPatterns = {"/jsonResponse"})
public class JsonResponse extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
Student student = new Student(12, "Ram Kumar", "Male", "1234565678");
Subject subject1 = new Subject(1, "Computer Fundamentals");
Subject subject2 = new Subject(2, "Computer Graphics");
Subject subject3 = new Subject(3, "Data Structures");
Set subjects = new HashSet();
subjects.add(subject1);
subjects.add(subject2);
subjects.add(subject3);
student.setSubjects(subjects);
Address address = new Address(1, "Street 23 NN West ", "Bhilai", "Chhattisgarh", "India");
student.setAddress(address);
Gson gson = new Gson();
String jsonData = gson.toJson(student);
PrintWriter out = response.getWriter();
try {
out.println(jsonData);
} finally {
out.close();
}
}
}
полезно от JSON ответ сервлета в Java