字符串JSON没有""关于JAXRS响应

时间:2016-12-28 10:32:38

标签: java-ee jax-rs

我创建了一个端点:

@Path(value = "/users")
@Produces(MediaType.APPLICATION_JSON)
public interface IUserCommtyEndpoint {
    @POST
    public abstract Response create(
        @HeaderParam("user") String username
    );

如您所见,我已指定此端点生成MetiaType.APPLICATION_JSON

这是实施:

@Override
public Response create(String username) {
    String userId = "some string";
    return Response
        .created(this.uriInfo.getAbsolutePathBuilder().path(userId).build())
        .entity(userId)
        .build();
}

尽管如此,回复正文内容为some string而不是""。因此,浏览器无法使用json格式解析此字符串值。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

Here你可以找到答案。

很快,发送单个字符串不正确。

答案 1 :(得分:0)

this answer中的问题“ ""是否是有效的JSON字符串?”所示,最新的JSON RFC 7159表示"some string"实际上是有效的JSON。 / p>

这另外answer帮助我使用杰克逊找到了问题服务器端的解决方案:

import java.io.IOException;
import java.io.OutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyWriter;

import com.fasterxml.jackson.databind.ObjectMapper;

public class StringMessageBodyWriter implements MessageBodyWriter<String> {

    @Override
    public boolean isWriteable(final Class<?> type, final Type genericType, final Annotation[] annotations, final MediaType mediaType) {
        return type == String.class && MediaType.APPLICATION_JSON_TYPE.equals(mediaType);
    }

    @Override
    public void writeTo(final String t, final Class<?> type, final Type genericType, final Annotation[] annotations, final MediaType mediaType, final MultivaluedMap<String, Object> httpHeaders, final OutputStream out) throws IOException, WebApplicationException {
        final ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.writeValue(out, t);
    }
}