2016-03-29 2 views
0

Это сводит меня с ума. Я работаю над конечной точкой REST в JAX-RS (Glassfish/Jersey). У меня есть метод, который должен получать String, хранить его и возвращать. Вся конечная точка должна потреблять и производить JSON. Но каждый раз, когда я отправляю String методу, он передается мне в скрытой форме. Например. если я отправляю:JAX-RS (Jersey): Строка из тела запроса JSON еще спасся

fetch("http://localhost:8080/myapp/rest/myresource", { 
    method: "post", 
    credentials: 'same-origin', 
    body: JSON.stringify("test\ntest"), 
    headers: { 
    "Content-Type": "application/json" 
    } 
}) 

и ресурс:

@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
public class MyResource { 

    @POST 
    public String set(@NotNull String value){ 
     // store it 
     return storedValue; 
    } 
} 

то, что хранится, и вернуться к клиенту, является:

"test\ntest" 

Если, однако, я обернуть Строка в объекте:

fetch("http://localhost:8080/myapp/rest/myresource", { 
    method: "post", 
    credentials: 'same-origin', 
    body: JSON.stringify({value: "test\ntest"}), 
    headers: { 
    "Content-Type": "application/json" 
    } 
}) 

с ресурсом

@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
public class MyResource { 

    @XmlRootElement 
    public static class Wrapper { 
     public String value; 
    } 

    @POST 
    public String set(@NotNull Wrapper wrapper) { 
     String value = wrapper.value; 
     // store it 
     return storedValue; 
    } 
} 

то значение, которое хранится и возвращается к клиенту

test 
test 

ли я что-то отсутствует?

Glassfish 4.1.1 
- jersey 2.10.4-0 
- json 1.0-0.1 

ответ

0

Для того чтобы оставить сырой строки как JSON с использованием JAX-RS, вы можете использовать «@JsonRawValue» обеспечивается fasterxml.jackson

Class ResponseObject { 

@JsonRawValue 
String jsonString; 
... 
} 

Всякий раз, когда вы отправляете объект ответа, неэкранированный JSON отправляется без косой черты.